оператор копирования класса

#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, поэтому, пожалуйста, помогите мне разобраться с примером.

-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 член / подобъект, который имеет недоступный (частный) оператор присваивания копии.

1

Другие решения

Других решений пока нет …