• 条款十二 复制对象时勿忘其每一个成分


    1.在类里涉及到对象拷贝的函数要复制类里每一个成分copy构造函数以及copy assignment操作符

    class Test
    {
    private:
       string name;
    
    public:
      Test(const Test& rhs):name(rhs.name) {}
      Test& operator = (const Test& rhs)
      {
        name = rhs.name;
        return this;
      }
    };

    这样如果类里再添加一个成员变量时,就得需要修改这两个函数,不然新成员不会被拷贝的新对象中,而且
    编译器一般不会报错

    2.在继承中,注意base类的拷贝

    class derve:public Test
    {
    private:
       string derveStr;
    public:
       derve(const derve& rhs):derveStr(rhs.derveStr){}
       derve& operator = (const derve& rhs)
       {
          derveStr = rhs.derveStr;
          return this;
      }
    };

    虽然继承类里看到了两个拷贝函数,但忘了base类的拷贝,继承类对象里也包含了base类的一份副本,所以继承类对象拷贝时也需要
    拷贝base的副本,如果继承类里没有调用base 的拷贝函数,会使用default的拷贝函数,如上面的继承类,拷贝时使用的是base类的default
    拷贝函数,则不能做到拷贝每个成分,在定义继承类的时候可以调用base类的自定义拷贝函数

    class derve:public Test
    {
    private:
      string derveStr;
    public:
      derve(const derve& rhs):derveStr(rhs.derveStr),Test(rhs){}
      derve& operator = (const derve& rhs)
      {
        Test::operator = (rhs);
        derveStr = rhs.derveStr;
        return this;
      }
    };

    3.如果两个拷贝函数有重复的代码,可以定义一个成员函数(如init()),将重复的代码放到这个成员函数中,然后拷贝函数再调用这个init()函数,
    这两个拷贝函数不要互相调用,这样不太好,应该把相同代码放到第三方函数中

  • 相关阅读:
    ASP.NET MVC中几个运用技巧
    Excel VBA 编程语法下
    C# 给窗体添加皮肤 SkinEngine的应用
    Windows Intune beta版发布
    简单对象使用方法
    Excel ActiveX 简介—常用控件ComboBox
    Thinking of Consultant:Trustworthy
    unity学习日志1
    Idea设置编辑区字体快捷键
    mysql Communications link failure的解决办法
  • 原文地址:https://www.cnblogs.com/bizhu/p/2613851.html
Copyright © 2020-2023  润新知