Как наследование некопируемого класса с помощью закрытого конструктора копирования и оператора присваивания запрещает использование конструктора копирования и оператора присваивания в производном классе? Пожалуйста, рассмотрите следующий сценарий, отвечая, индивидуально,
Что если конструктор копирования по умолчанию и оператор присваивания генерируются компилятором в производном классе и не добавляются программистом
Что если, конструктор Copy и оператор присваивания определены и объявлены общедоступными в производном классе программистом
Что если, конструктор Copy и оператор присваивания определены и объявлены закрытыми в производном классе программистом
Конструктор копирования по умолчанию и оператор присваивания генерируются компилятором в производном классе и не добавляются программистом
Неявные функции будут пытаться вызывать своих аналогов в базовом классе. Это будет невозможно, поскольку они являются частными для базового класса, поэтому вы получите ошибку компиляции. Вот как должен работать базовый класс.
Конструктор копирования и оператор присваивания определяются и объявляются общедоступными в производном классе программистом
Тогда вы победили цель наследования от базового класса; Ваш производный класс теперь можно копировать с помощью этих функций.
Конструктор копирования и оператор присваивания определяются и объявляются закрытыми в производном классе программистом
Опять же, вы победили базовый класс и сделали свой класс копируемым; но только в пределах своих функций члена и друга.
1) Тогда любая копия или присвоение не удастся скомпилировать, потому что сгенерированный компилятором конструктор копирования и оператор присваивания требуют доступа к базовому классу.
2) Это было бы ошибкой программиста. Вы хотите, чтобы ваш класс не подлежал копированию и назначению, поэтому вам не следует предоставлять публичные методы для этого. Компилятор может выдать предупреждение, но код скомпилируется.
3) Тогда присвоение и копирование приведут к ошибке компиляции, как в 1) выше, если не вызвано friend
функции или классы, или внутренне в том же классе.
Принятое сообщение заключается в том, что вы не должны предоставлять конструктор копирования или оператор присваивания для класса, который нельзя скопировать. Пусть механизм наследования сам по себе обеспечивает необходимые ограничения.