• 复制控制:拷贝构造、赋值操作符


    区别

    调用拷贝构造

    Teacher t2 = t1;    //类类型,复制初始化时调用拷贝构造函数,直接初始化调用对应构造函数
    

    调用赋值运算符

    Teacher t2;
    t2 = t1;
    

    拷贝构造函数

    单形参、且形参类型为该类类型的引用 (常const修饰)的构造函数

    class Test{
    public:
      Test(){
        data = 0;
      }
      Test(int d):data(d){
      }
      ~Test(){
      }
    
      Test(const Test &test)
       {
        data = test.data;
      }
    private:
      int data;
    };
    

    如果形参为引用,调用拷贝构造函数

    void func(const string &s1);    //隐式调用string拷贝构造
    

    赋值操作符

    class Test{
    public:
      Test(){
        data = 0;
      }
      Test(int d):data(d){
      }
      ~Test(){
      }
    
      //重载=号运算符                                            
      Test& operator= (const Test &t){
        if(this != &t){    //防止自赋值
          data = t.data;
        }
        return *this;
      }
    private:
      int data;
    };
    

    禁止拷贝

    私有拷贝构造和赋值操作符

    class Test{
    public:
      Test(){
        data = 0;
      }
      Test(int d):data(d){
      }
      ~Test(){
      }
    private:
      //  禁止拷贝                                         
      Test& operator= (const Test &);
      Test(const Test&);
      int data;
    };
    
  • 相关阅读:
    flutter 布局
    常见错误
    xpath
    bzoj1485 [HNOI2009]有趣的数列 卡特兰数
    博弈 Nim问题 POJ2234
    bzoj 1014 [JSOI2008]火星人prefix
    codevs 1743 反转卡片 rope or splay
    bzoj 2326 矩阵乘法
    bzoj 1702 贪心,前缀和
    bzoj 1700 Problem Solving 解题 dp
  • 原文地址:https://www.cnblogs.com/xiongyungang/p/11361438.html
Copyright © 2020-2023  润新知