Перейти к основному содержимому
Модуль 6 · Урок 1 из 213/18 в курсе~12 min
Уроки модуля (1/2)

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

Наследование — один из ключевых столпов объектно-ориентированного программирования (ООП). Он позволяет новому классу (называемому производным или дочерним классом) наследовать члены (атрибуты и методы) от существующего класса (называемого базовым или родительским классом), способствуя повторному использованию кода.

Основной синтаксис

В C++ наследование указывается с помощью оператора : после имени производного класса, за которым следует спецификатор доступа (обычно public) и имя базового класса.

C++
class Shape {
public:
    void setColor(std::string c) {
        color = c;
    }
protected:
    std::string color; // Accessible by derived classes
};

// Rectangle inherits publicly from Shape
class Rectangle : public Shape {
public:
    double getArea() {
        return width * height;
    }
private:
    double width {0.0};
    double height {0.0};
};

Спецификатор доступа: protected

Наряду с public и private, наследование вводит спецификатор protected:

  • private члены базового класса не доступны напрямую из производного класса.
  • protected члены базового класса недоступны снаружи, но доступны напрямую внутри производных классов.

Инициализация базового класса

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

C++
class Parent {
public:
    Parent(int x) {
        std::cout << "Parent: " << x << std::endl;
    }
};

class Child : public Parent {
public:
    // Explicit call to Parent constructor
    Child(int x, int y) : Parent(x) {
        std::cout << "Child: " << y << std::endl;
    }
};

Попробуйте сами

Упражнение#cpp.m6.l1.e1
Попыток: 0Загрузка…

Создайте класс Dog, который публично наследуется от класса Animal. Класс Dog должен включать общедоступный метод play(), который печатает «Playing» с помощью std::cout.

Загрузка редактора…
Показать подсказку

Используйте синтаксис `:`, за которым следует `public Animal`, чтобы расширить базовый класс, затем напишите метод `play()`.

Решение доступно после 3 попыток

Упражнение#cpp.m6.l1.e2
Попыток: 0Загрузка…

Завершите класс Car, унаследовав его от Vehicle. Напишите конструктор для Car, который принимает std::string b и передает его конструктору Vehicle через список инициализаторов членов.

Загрузка редактора…
Показать подсказку

В конструкторе Car используйте синтаксис: Vehicle(b) сразу после круглых скобок параметра, чтобы делегировать инициализацию бренда базовому классу.

Решение доступно после 3 попыток