问题如题,碰到这个问题,于是些代码验证了一下:
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;
}