Уроки модуля (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 попыток