Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Множинне наслідування | Огляд наслідування
ООП C++

Множинне наслідування

Свайпніть щоб показати меню

Множинне наслідування дозволяє похідному класу наслідуватися від кількох базових класів. Це означає, що один похідний клас може мати доступ до членів (даних і функцій) кількох базових класів, ефективно поєднуючи їхні атрибути та поведінку.

Горизонтальне множинне наслідування

У цьому типі множинного наслідування клас успадковує властивості та методи від кількох суперкласів на одному рівні в ієрархії наслідування. Розглянемо classes: Shape і Color, кожен з яких має унікальні властивості та методи. Shape визначає форму об'єкта, а Color визначає його колір.

Shape.h

Shape.h

Color.h

Color.h

1234567
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

ColoredShape.h

123456789
#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

Vehicle.h

Car.h

Car.h

12345
class Vehicle { public: void start() { std::cout << "Vehicle started"; } void stop() { std::cout << "Vehicle stopped"; } };

Щоб реалізувати вертикальне наслідування, необхідно створити ієрархію, у якій один class наслідується від іншого, а наступний клас наслідується від попереднього і так далі. Можна створити ElectricCar, який наслідує всі властивості та функціональність від Car, що, у свою чергу, наслідується від Vehicle, формуючи складну структуру множинного наслідування.

ElectricCar.h

ElectricCar.h

123456
#include "Car.h" class ElectricCar : public Car { public: void charge() { std::cout << "Electric car is charging"; } };

Чому потрібне множинне наслідування

Множинне наслідування забезпечує гнучкість і повторне використання коду у випадках, коли class повинен мати поведінку або характеристики більше ніж одного батьківського class. Ось декілька сценаріїв, де множинне наслідування є корисним:

  • Реальні ролі: літаючий птах може поєднувати властивості як з Flying, так і з Bird класів, представляючи обидві можливості. Клас Flying також може застосовуватись до літаків чи інших літаючих об'єктів.

  • Повторне використання коду: множинне наслідування дозволяє класу використовувати функціонал різних базових класів без дублювання.

  • Сфокусовані інтерфейси: заохочує комбінування невеликих, спеціалізованих інтерфейсів замість використання одного великого, загального.

Note
Примітка

Розділення складного об'єкта на простіші та використання множинного наслідування для створення гнучкого й підтримуваного програмного забезпечення.

question mark

Яке з наведених тверджень про горизонтальне наслідування є правильним?

Виберіть правильну відповідь

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 4. Розділ 3

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Секція 4. Розділ 3
some-alt