为什么基类的默认构造函数总是执行?
- 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; }};