Назад к вопросам
Middle
164
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