《Effective C艹》读书笔记(8)

条款12:复制对象时勿忘其每一个成分

    对于一个简单的类的拷贝函数,我们可以这样写

class base{
public:
    int data;
    base& operator=(const base& a){
        this->data = a.data;
        return *this;
    }
};

    拷贝构造函数的情况和赋值拷贝情况类似。如果这时,我们要改变这个类,增加一个double b,但是没有修改赋值函数的话,进行赋值就会把新添加的变量遗漏掉!所以说,当对类进行修改之后,不要忘记更新构造函数以及赋值函数。

    

     当存在继承关系时,如果把拷贝构造函数写成这样

class dev:public base{
public:
    int devdata;
    dev(const dev& a):base(a),devdata(a.devdata){}
};

 就会把基类的初始化给遗漏掉,应该要注意对基类的部分进行初始化

class dev:public base{
public:
    int devdata;
    dev(const dev& a):base(a),devdata(a.devdata){}
};

 对于赋值运算符,我们应该写成

class dev:public base{
public:
    int devdata;
    dev(const dev& a):base(a),devdata(a.devdata){}
    dev& operator=(const dev& a){
        base::operator=(a);
        devdata = a.devdata;
        return *this;
    }
};

猜你喜欢

转载自bbezxcy.iteye.com/blog/2242184
今日推荐