类的复制赋值运算符

copy assignment operator of class

本文关键字:赋值运算符 复制      更新时间:2023-10-16
#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,所以请通过一些示例帮助我理解。

情况 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成员/子对象,该对象具有不可访问的(私有(复制赋值运算符。