读书人

初学者关于派生类的的复制构造函数

发布时间: 2012-09-16 17:33:16 作者: rapoo

菜鸟求助:关于派生类的的复制构造函数
class Base
{
public:
Base(int d = 1):day(d){};
Base(const Base &b){day = b.day;}
protected:
int day;
};

class Drived:public Base
{
public:
Drived(int d = 1,int m = 1):Base(d),month(m){}
Drived(const Drived & d)
{
Base::Base(d);
month = d.month;
}
void print(){cout<<day<<" "<<month;}
private:
int month;
};

当我这样写时,
Drived d1(2,2);
Drived d2(d1);
d2.print();
的结果是1,2,说明d2的day成员并没有被初始化成功,而是调用的默认构函数,而当我改成这样,就对了:
Drived(const Drived & d):Base(d)
{

month = d.month;
}
这是为什么呢?难道对于基类成员的初始化,必须在初始化列表中完成?


[解决办法]
是,必须在初始化列表完成。
中间写的话 只是重新创建了一个base类型的临时对象而已。

读书人网 >C++

热点推荐