Модульні уроки (1/2)
Спадкування в C++
Наслідування є одним із ключових стовпів об’єктно-орієнтованого програмування (ООП). Це дозволяє новому класу (званому похідним або дочірнім класом) успадковувати членів (атрибути та методи) від існуючого класу (званого базовим або батьківським класом), сприяючи повторному використанню коду.
Базовий синтаксис
У C++ успадкування вказується за допомогою оператора : після назви похідного класу, після якого йде специфікатор доступу (зазвичай public) і ім’я базового класу.
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члени базового класу недоступні ззовні, але безпосередньо доступні всередині похідних класів.
Ініціалізація базового класу
Конструктори не успадковуються автоматично. Під час створення екземпляра похідного класу спочатку викликається конструктор базового класу. Якщо базовому класу потрібні аргументи, ми повинні явно викликати його в списку ініціалізаторів членів похідного конструктора.
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;
}
};Спробуйте самі
Створіть клас Dog, який публічно успадковує клас Animal. Клас Dog повинен містити публічний метод play(), який друкує «Playing» за допомогою std::cout.
Показати підказку
Використовуйте синтаксис `:`, а потім `public Animal`, щоб розширити базовий клас, а потім напишіть метод `play()`.
Рішення доступне після 3 спроб
Завершіть клас Car, успадкувавши від Vehicle. Напишіть конструктор для Car, який приймає std::string b і передає його конструктору Vehicle через список ініціалізаторів членів.
Показати підказку
У конструкторі `Car` використовуйте синтаксис `: Vehicle(b)` відразу після дужок параметра, щоб делегувати ініціалізацію бренду базовому класу.
Рішення доступне після 3 спроб