Перейти до основного вмісту
Модуль 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 спроб