读书人

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

发布时间: 2012-04-16 16:20:04 作者: rapoo

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

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;    }}; 

读书人网 >C++

热点推荐