• effective c++ 条款12 赋值对象时勿忘其每一个成员


    当我们自己为class设计 copy构造函数和copy assignment操作符时,如果我们漏掉一个成员变量时,编译器并不会友好的告诉你,当然有时候我们也是故意这样做。当我们担起“为派生类写copy 函数”时责任重大,必须也要小心的复制其base class部分 如下:

    class Customer {};
    class PriorityCustomer:public Customer{
    public :
          PriorityCustomer(const PriorityCustomer& rhs);
          PriorityCustomer& operator= (const PriorityCustomer& rhs);
    private:
        int priority;
    }
    PriorityCustomer::PriorityCustomer(const PriorityCustomer& rhs):Customer(rhs),  //调用基类的copy构造函数
    priority(rhs.priority)
    {
        
    }
    PriorityCustomer& PriorityCustomer::operator=(const PriorityCustomer& rhs)
    {
        Customer::operator=(rhs);
        priority = rhs.priority;
        return *this;
    }

    由于copy构造函数和 copy assignment 函数很相似,难免不让我们产生互相调用对方的想法,所以我们需要澄清两点:

    1.在copy assignment中调用copy构造函数是不合法的因为我们试图创建已经存在的对象。

    2.相反在copy 构造函数里调用copy assignment也是不合法的,因为我们试图给没有初始化的变量赋值。。

  • 相关阅读:
    [转] Java中的static关键字解析
    [转] Java中public,private,final,static等概念的解读
    [转] Java关键字final、static使用总结
    Android Studio代码调试大全
    [转] Java接口_interface_implements
    中介者模式
    责任链模式
    命令模式
    桥接模式
    单例模式
  • 原文地址:https://www.cnblogs.com/onlycxue/p/3078634.html
Copyright © 2020-2023  润新知