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

Зміст курсу

C++ ООП

C++ ООП

1. Основи ООП у C++
2. Конструктори та Деструктори
3. Огляд Інкапсуляції
4. Огляд Наслідування
5. Огляд Поліморфізму

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

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

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

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

Shape.h

Shape.h

Color.h

Color.h

copy
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

copy
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

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

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

ElectricCar.h

ElectricCar.h

copy
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

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

Select the correct answer

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

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

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

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

Запитати АІ

expand

Запитати АІ

ChatGPT

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

course content

Зміст курсу

C++ ООП

C++ ООП

1. Основи ООП у C++
2. Конструктори та Деструктори
3. Огляд Інкапсуляції
4. Огляд Наслідування
5. Огляд Поліморфізму

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

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

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

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

Shape.h

Shape.h

Color.h

Color.h

copy
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

copy
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

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

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

ElectricCar.h

ElectricCar.h

copy
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

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

Select the correct answer

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

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

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

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