问题如题,碰到这个问题,,于是些代码验证了一下:
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个只有兴趣者。