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

为什么基类的默认构造函数总是执行?该如何处理

2012-04-16 
为什么基类的默认构造函数总是执行?C/C++ codeclass Animal{protected:int data[2]public:Animal(){data[

为什么基类的默认构造函数总是执行?

C/C++ code
class Animal{protected:    int data[2];public:    Animal()    {        data[0]=0;        data[1]=0;    }    Animal(int a,int b)    {        data[0]=a;        data[1]=b;    }};class Cow:public Animal{public:    Cow(int a)    {        Animal(5,6);    }    void getPrint()    {        cout<<data[0]<<" "<<data[1]<<endl;    }};int _tmain(int argc, _TCHAR* argv[]){    Cow* c=new Cow(2);    c->getPrint();    return 0;}


这句执行Cow* c=new Cow(2);后接着执行Animal(5,6);吧
结果data的两个数还是0,哪里执行了Animal()?

[解决办法]
Animal(5,6) 只是在Cow的构造函数中生成了一个临时变量,并没有改变自身对象的值.

正确的写法应该是
Cow的构造函数写成 
C/C++ code
...Cow(int a) : Animal(5, 6){}...
[解决办法]
1.
C/C++ code
class Cow:public Animal{public:    Cow(int a)    {        Animal(5,6);  //这里构造生成一个无名对象,并没有初始化自身。    }    void getPrint()    {        cout<<data[0]<<" "<<data[1]<<endl;    }}; 

热点排行