首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请教上面这段代码为什么会这样输出

2013-03-19 
请问下面这段代码为什么会这样输出#include iostreamusing namespace std class A{public:A() {display

请问下面这段代码为什么会这样输出


#include <iostream>
using namespace std ;
class A
{
public:
A() {display() ;}
virtual void display() {cout << "AAA"  ;}
};
class B:public A
{
public:
B() {display() ;}
virtual void display() {cout << "BBB"  ;}//对基类的虚函数重写
};
int main()
{
B b ;
system("pause") ;
return 0 ;
}

为什么会输出AAAA BBB?以我看虚函数会调用根据对象类型调用派生类的虚函数呀,我以为要输出BBB BBB呢。
[解决办法]
先执行A的构造函数,这时候执行
display() ;

相当于执行
this->display() ;
当然调用的是它自己的函数
只有在类外面执行的时候才会根据对象类型选择派生类的函数
[解决办法]
构造先执行父类再子类
析构相反

热点排行