子类的拷贝构造函数如何调用其父类的拷贝构造函数

class base {public: base(int initialvalue = 0): x(initialvalue) {} base(const base& rhs): x(rhs.x) {}private: int x;};class derived: public base {public: derived(int initialvalue) : base(initialvalue), y(initialvalue) {} derived(const derived& rhs) // 错误的拷贝 : y(rhs.y) {} // 构造函数private: int y;};类derived展现了一个在所有c++环境下都会产生的bug:当derived的拷贝创建时,没有拷贝其基类部分。当然,这个derived对象的base部分还是创建了,但它是用base的缺省构造函数创建的,成员x被初始化为0(缺省构造函数的缺省参数值),而没有顾及被拷贝的对象的x值是多少!为避免这个问题,derived的拷贝构造函数必须保证调用的是base的拷贝构造函数而不是base的缺省构造函数。这很容易做,,只要在derived的拷贝构造函数的成员初始化列表里对base指定一个初始化值:class derived: public base {public: derived(const derived& rhs): base(rhs), y(rhs.y) {} …};现在,当用一个已有的同类型的对象来拷贝创建一个derived对象时,它的base部分也将被拷贝了。

曾经拥有的不要忘记,难以得到的更要珍惜,

子类的拷贝构造函数如何调用其父类的拷贝构造函数

相关文章:

你感兴趣的文章:

标签云: