首页 > 其他 > 详细

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

时间:2015-09-10 02:17:46      阅读:284      评论:0      收藏:0      [点我收藏+]

条款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;
    }
};

?

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

原文:http://bbezxcy.iteye.com/blog/2242184

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!