您的位置:首页 > 编程语言 > C语言/C++

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

2012-02-19 21:12 363 查看
问题如题,碰到这个问题,于是些代码验证了一下:

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: