码迷,mamicode.com
首页 > 编程语言 > 详细

Effective C++ 条款12

时间:2017-06-20 14:42:36      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:base   text   effect   dcl   pre   phone   app   line   tle   

复制对象时,勿忘其每个成分

作者在本节条款提醒我们,在多重继承的情况下进行copy或者copy assignment 的operator=的编写时,一定要考虑base 类部分数据的初始化后者复制。

对照一下代码:

class Cutsomer
{
……
private:
    string name;
    string telphone;
};


class PriorityCustomer:public Cutsomer
{
public:
    PriorityCustomer()
    {
        cout<<"PriorityCustomer Ctor"<<endl;
    }
    PriorityCustomer(const PriorityCustomer& rhs)
        :priority(rhs.priority)
    {
        cout<<"PriorityCustomer Copy Ctor"<<endl;
    }
    PriorityCustomer& operator=(const PriorityCustomer& rhs)
    {
        cout<<"PriorityCustomer assign operator"<<endl;
        priority=rhs.priority;
        return *this;
    }
private:
    int priority;
};

PriorityCustomer中的数据有下面

    int priority;
    string name;
    string telphone;

而真正copy或者copy assignment的时候仅仅处理了int priority;
我们能够看到上面的代码中忽视了base类部分的数据的处理。这时改动代码例如以下:

PriorityCustomer(const PriorityCustomer& rhs)
        :Cutsomer(rhs),priority(rhs.priority)
    {
        cout<<"PriorityCustomer Copy Ctor"<<endl;
    }
    PriorityCustomer& operator=(const PriorityCustomer& rhs)
    {
        cout<<"PriorityCustomer assign operator"<<endl;
        Cutsomer::operator=(rhs);
        priority=rhs.priority;
        return *this;
    }

Effective C++ 条款12

标签:base   text   effect   dcl   pre   phone   app   line   tle   

原文地址:http://www.cnblogs.com/jhcelue/p/7053749.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!