Зміст курсу
C++ ООП
C++ ООП
Множинне наслідування
Множинне наслідування дозволяє похідному класу наслідувати від декількох базових класів. Це означає, що один похідний клас може мати доступ до членів (даних і функцій) декількох базових класів, ефективно поєднуючи їхні атрибути та поведінку.
Горизонтальне множинне наслідування
У цьому типі множинного наслідування клас наслідує властивості та методи від декількох суперкласів на одному рівні ієрархії наслідування. Розглянемо classes
: Shape
і Color
, кожен з яких має унікальні властивості та методи. Shape
визначає форму object, а Color
визначає його колір.
Shape.h
Color.h
class Shape { public: void setShape(const std::string& value) { shape = value; } std::string getShape() { return shape; } private: std::string shape; };
Тепер створимо підклас під назвою ColoredShape
, який успадковує властивості та методи від обох класів: Shape
та Color
.
ColoredShape.h
#include "Shape.h" #include "Color.h" class ColoredShape : public Shape, public Color { public: void describe() { std::cout << "This object is a " << getShape() << " shape and is " << getColor() << '\n'; } };
Вертикальне наслідування
У глибокому наслідуванні class
успадковує властивості та методи від свого безпосереднього батьківського класу та його предків, утворюючи ланцюг наслідування. Наприклад, розглянемо class
Vehicle
, який може бути основою для наслідування для Car
, Truck
та інших. У нашому прикладі ми використаємо Car
для ілюстрації цієї концепції.
Vehicle.h
Car.h
class Vehicle { public: void start() { std::cout << "Vehicle started"; } void stop() { std::cout << "Vehicle stopped"; } };
Щоб реалізувати вертикальне наслідування, необхідно побудувати ієрархію, у якій один class
наслідується від іншого, а наступний клас наслідується від попереднього і так далі. Можна створити ElectricCar
, який успадковує всі властивості та функціональність від Car
, що, у свою чергу, наслідується від Vehicle
, формуючи складну структуру множинного наслідування.
ElectricCar.h
#include "Car.h" class ElectricCar : public Car { public: void charge() { std::cout << "Electric car is charging"; } };
Чому потрібне множинне наслідування
Множинне наслідування забезпечує гнучкість і повторне використання коду у випадках, коли class
повинен мати поведінку або характеристики більше ніж одного батьківського class
. Ось деякі ситуації, коли множинне наслідування є корисним:
Реальні ролі: літаючий птах може поєднувати властивості як
Flying
, так іBird
класів, що відображає обидві здібності. КласFlying
також може застосовуватися до літаків чи інших літаючих об'єктів.Повторне використання коду: множинне наслідування дозволяє класу використовувати функціонал різних базових класів без дублювання.
Сфокусовані інтерфейси: заохочує комбінування невеликих, специфічних інтерфейсів замість використання одного великого, загального.
Розділення складного об'єкта на простіші та використання множинного наслідування для створення гнучкого й підтримуваного програмного забезпечення.
Дякуємо за ваш відгук!