Назад к вопросам
Middle
163
questionbank
Как запретить наследование от данного класса в C++?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
// Запрет наследования с использованием final (C++11 и выше)
class Base final {
// Члены класса
};
// class Derived : public Base {}; // Ошибка компиляции: невозможно наследовать от final класса
// Запрет наследования в старых стандартах (C++98/03) через приватный или защищенный конструктор базового класса
class Base {
protected: // Или private
Base() = default; // Или любой другой конструктор
// Другие члены класса
};
class Derived : public Base {
public:
// Derived() : Base() {} // Ошибка компиляции: нет доступа к защищенному/приватному конструктору Base
// Члены класса
};
// Использование такой базы возможно только через статические методы или фабричные функции
class BaseFactory {
public:
static Base* createBase() {
return new Base();
}
};
// Запрет наследования в старых стандартах (C++98/03) через "виртуальное наследование" от приватного класса
class Noninheritable;
class Base : virtual Noninheritable {
// Члены класса
};
class Noninheritable {
private:
Noninheritable() = default;
friend class Base; // Предоставляем доступ классу Base
};
// class Derived : public Base {}; // Ошибка компиляции: нет доступа к приватному конструктору Noninheritable