【问题标题】:copy assignment operator of class类的复制赋值运算符
【发布时间】:2013-05-27 07:25:12
【问题描述】:
#include <iostream>
using namespace std;

class ClassA
{
  const int a;
  int b, c;
      public:
    ClassA(int x, int y):a(10)
    {
       b = x;
       c = y;
    }
    ClassA():a(10)
    {
    }
    void print()
    {
    cout << a << endl;
    }
};

int main()
{
  ClassA objA(10, 20);
  ClassA objB;
  objB = objA;
  objB.print();
  return 0;
}

编译器在下列情况下不会创建复制赋值运算符:

  1. 类具有 const 类型或引用类型的非静态数据成员。
  2. 类有一个类型的非静态数据成员,它有一个不可访问的复制赋值运算符。
  3. 类派生自具有不可访问的复制赋值运算符的基类。

在上述情况下,我通过上述示例理解了情况 1。但我没有得到案例 2 和案例 3,所以请通过一些例子帮助我理解。

【问题讨论】:

标签: c++ copy-assignment


【解决方案1】:

情况 2 是这样的:

class non_assignable { 
   // note: private
   non_assignable &operator=(non_assignable const &source);
};

class whatever { 
    non_assignable n;
};

案例 3 类似于:

 class whatever : public non_assignable {};

在任何一种情况下,都不会为 whatever 自动生成复制赋值运算符,因为它包含一个 non_assignable 成员/子对象,它有一个不可访问的(私有)复制赋值运算符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 2011-11-16
    • 2013-12-04
    • 2020-02-28
    • 2020-04-09
    • 1970-01-01
    相关资源
    最近更新 更多