条款 12

来源:互联网 发布:网络延时测试工具 编辑:程序博客网 时间:2024/04/29 11:15

一,在派生类的copy构造函数中调用基类的copy构造函数

class Base{private:    string name;    int age;public:    Base(const Base& rhs):name(rhs.name), age(rhs.age){}    Base& operator=(const Base& rhs){        name = rhs.name;        age = rhs.age;        return *this;    }};class Derived : public Base{private:    int grade;public:    Derived(const Derived& rhs):        Base(rhs),  //调用Base class的copy构造函数        grade(rhs.grade){}    Derived& operator=(const Derived& rhs){        Base::operator=(rhs);  //对Base class部分进行赋值动作        grade = rhs.grade;        return *this;    }};
程序分析:

如果在Derived class中的copy构造函数中,没有调用Base class的copy构造函数,此时只会复制Derived class声明的成员变量,但是它包含的Base class部分没有被复制,因此Derived对象的Base成分会被Base class的default 构造函数初始化。如果重写派生类的copy构造函数,此时应当显示调用基类的copy构造函数。对于copy assignment运算符来说,原理是一样的。

原创粉丝点击