-1
#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が得られないので、例を挙げて理解してください。

4

1 に答える 1

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

于 2013-05-27T07:28:56.970 に答える