Статьи

Учебные материалы по языку C++ — от основ до продвинутых тем

Наследование в C++

Страница 26 из 43 · 2026-10-25 · 1 мин чтения

Наследование в C++

Базовый и производный класс

Наследование описывает отношение «является». Производный класс получает доступ к разрешённым членам базового класса и может расширить поведение.

class Entity {public:    explicit Entity(int health) : health(health) {}    int GetHealth() const { return health; }private:    int health;};class Player : public Entity {public:    Player() : Entity(100) {}};

Player является Entity, поэтому public-интерфейс базового класса доступен через объект Player.

Виды наследования

При public-наследовании публичные члены базы остаются публичными, а protected остаются защищёнными. При protected и private-наследовании доступ меняется, поэтому такие варианты требуют конкретной причины. Для отношения «имеет» чаще подходит композиция.

protected

protected доступен базовому классу и его наследникам. Не превращай все поля в protected: это создаёт сильную связь между классами и позволяет производным типам нарушать внутренние правила базы.

Конструкторы и деструкторы

Сначала конструируется базовая часть, затем поля и тело производного класса. При уничтожении порядок обратный. Производный конструктор должен корректно инициализировать базовый класс в списке инициализации.

Когда наследование не подходит

Если два класса просто используют одинаковую функцию, это не обязательно повод для наследования. Подумай о свободной функции, композиции или общем небольшом компоненте.

Итог

Используй наследование для настоящего отношения «является» и стабильного общего интерфейса. Для повторного использования реализации без такого отношения предпочитай композицию.