C++ 子类B重载父类A的方法funA后,在父类A中调用funA会调用子类B

问题如题,碰到这个问题,,于是些代码验证了一下:

class A{public:virtual void funA(){printf("A");}void Run(){funA();}};class B : public A{public:virtual void funA(){printf("B");}};int _tmain(int argc, _TCHAR* argv[]){B b;b.Run();return 0;}如此,通过调用父类的Run方法,来调用funA,结果输出为子类重载后输出的B

奇怪的是,如果不从Run出发,而是通过父类的构造方法,则输出为父类的A,估计是构造顺序问题,构造B时,首先会构造父类A,然后此时A通过构造方法将A输出,此时B并未构造,可能也还没有把funA重载掉,不知道是否正确,求大侠解释!

class A{public:A(){funA();}virtual void funA(){printf("A");}void Run(){funA();}};class B : public A{public:virtual void funA(){printf("B");}};int _tmain(int argc, _TCHAR* argv[]){B b;return 0;}

一个有信念者所开发出的力量,大于99个只有兴趣者。

C++ 子类B重载父类A的方法funA后,在父类A中调用funA会调用子类B

相关文章:

你感兴趣的文章:

标签云: