今天些程序的时候遇到了一个奇怪的现象,都是怪自己以前没有注意过,或者说没有深入分析过,很容易出错的东东。特意记下来,防止以后出错。 class A { public: virtual void init() { } void another() { init() ;} }; class B:public A { void init() { A::init(); } }; class C:public A { void init() { A::another(); } }; int main() { B b; C c; b.init(); //没有问题 c.init();//这里会导致死循环 } 这里在b和c中都是用父类调用的方法,但是b没有问题,但是c出问题了。 究其原因,b中没有问题是因为直接用A::init()去调用的,init是A中的方法,自然可以使用。而c中使用A::another()的时候,another()是A中的方法,但是another()中调用的init()因为是虚函数,就调用到了C中本身的init(),这样反复调用,最终导致死循环。 |
|
来自: 昵称11200860 > 《C 》