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()?

推荐图书

  • C++ Primer中文版(第4版)
  • More Effective C++:35个改善编程与设计的有效方法(中文版)
  • 设计模式:可复用面向对象软件的基础


1个回答

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

正确的写法应该是

Cow的构造函数写成

...
Cow(int a) : Animal(5, 6){}
...