Рекомендуємо, 2024

Вибір Редакції

Різниця між одиночним і множинним успадкуванням

Успадкування сильно підтримує концепцію повторного використання, тобто новостворений клас повторно використовує властивості вже існуючих. Специфікатор доступу вирішує, яким чином член базового класу буде успадковуватися похідним класом. Існує багато способів досягнення успадкування одного, декількох, ієрархічних, багаторівневих, гібридних. В той час, як наша головна тема обговорення - це різниця між єдиним і багаторазовим успадкуванням. У єдиному успадкуванні ми маємо тільки один базовий клас, який успадковується тільки одним похідним класом. У багаторазовому успадкуванні ми маємо більше двох базових класів, які успадковуються комбінацією тільки одного похідного класу.


Діаграма порівняння

Основа для порівнянняОдиничне успадкуванняБагаторазове успадкування
ОсновнийПохідний клас успадковує один базовий клас.Похідний клас успадковує два або більше двох базових класів.
РеалізаціяКлас der_class: access_specifier базовий класКлас виведений _клас: access_specifier base_class1, access_specifier base_class2, ....
Доступ
Похідний клас доступ до функцій одного базового класуПохідний клас доступ до об'єднаних особливостей успадкованих базових класів
ВидимістьПублічний, приватний, захищенийПублічний, приватний, захищений
Час виконанняНеобхідна невелика кількість часу роботи над головоюВимагати додаткових накладних витрат під час виконання в порівнянні з одним успадкуванням

Визначення єдиного спадкування

В єдиному успадкуванні є єдиний базовий клас і єдиний похідний клас. Похідний клас успадковує базовий клас публічно, захищеним і приватним. До учасників базового класу можна отримати похідний клас відповідно до специфікатора доступу, вказаного під час успадкування базового класу.

Давайте мати приклад реального життя, ми маємо два класи, "клас рахунків" і "клас збереження рахунку". Тут «збереження класу рахунків» може успадковувати особливість «класу облікових записів», тому клас «клас класу» стане базовим / супер / батьківським класом для збереження класу рахунків, а «клас збереження рахунку» буде похідним класом.

Тут атрибути "класу облікових записів" є acc_no (приватним) і балансом (public), а функції члена ініціалізуються (), get_accno (), які є загальнодоступними. Тепер, «клас рахунків» успадковується від «збереження класу рахунків» публічно, так що всім загальнодоступним учасникам «класу рахунків» можна безпосередньо звертатися за допомогою «класу збереження рахунку». Він може отримати доступ до приватного члена "класу рахунків" через загальнодоступні функції "класу облікових записів", але не має доступу до них безпосередньо.

Реалізація єдиного успадкування:

 # включають використання простору імен std; класу Account {int acc_no, ; публічний: плаваючий баланс; void ініціалізувати (int x, int y) {acc_no = x; баланс = y; } int get_accno. () {return acc_no; }}; class Saving_acc: загальний обліковий запис {float intrest_rate; public: // конструктор класу Saving_acc Saving_acc (int c) {interest_rate = c; } void display () {cout < 

Визначення множинного спадкування

Багаторазове успадкування дозволяє похідному класу наслідувати об'єднані функції більш ніж одного базового класу, тобто ми маємо єдиний похідний клас і кілька базових класів. Кожен базовий клас повинен бути успадкований, згадавши окремий специфікатор доступу для кожного з них. Похідний клас може отримати доступ до членів базових класів на основі специфікатора доступу, яким успадковується базовий клас.

Дозволяє зробити це легше з прикладом ми маємо три класу тобто велосипед, автомобіль, та автомобіль. Тепер «Автомобіль» може успадкувати особливості «Велосипеду», а також «Автомобіля». Отже, «Автомобіль» стає похідним класом, а «Байк» і «Автомобіль» стають базовим класом. Тепер, "Велосипед" і "Автомобіль" публічно успадковуються від "Автомобіля", він може отримати доступ до всіх громадських членів "Велосипеду" і "Автомобіля", але, як ми маємо об'єкт Model_no, захищений в "Автомобілі", так що це приватний автомобіль Доступ до "Автомобіля".

Впровадження декількох наслідків:

 # включають використання простору імен std; class Bike {int engine_cost; ; public: void set_engine_cost (int x) {engine_cost = x; }}; клас автомобіля {protected: int Model_no; public: void set_Model_no (int p) {Model_no = p; }}; class Vehical: public Велосипед, громадський автомобіль {int no_of_wheels public: vehical (int w) {no_of_wheels = w; cout << "без коліс" < 

Основні відмінності між одиночним і множинним успадкуванням

  1. Єдине успадкування - це один похідний клас, що має єдиний базовий клас, тоді як у множинному успадкуванні є два або більше двох базових класів, але єдиний похідний клас.
  2. Багаторазове успадкування є досить заплутаним, оскільки тут один похідний клас успадковує два або більше базового класу. Якщо базові класи мають атрибут або функцію з однаковою назвою, то для похідного класу стає важко визначити, який атрибут або функція базового класу він повинен виводити.
  3. Витрати на накладні витрати є меншими у випадку одного спадку. Але у випадку багаторазового успадкування конструкція або руйнування об'єкта викликає конструктори і деструктор батьківського класу в ієрархії класів, що збільшує накладні витрати.
  4. Єдине успадкування більше спрямоване на спеціалізацію. У той час як багаторазове успадкування більше стосується узагальнення.
  5. Оскільки одне успадкування має менше накладних витрат, воно має менше часу виконання в порівнянні з багаторазовим успадкуванням.

Висновок

Успадкування полегшує роботу програміста, оскільки, якщо один клас вже сформований, його функції можуть бути адаптовані іншими, якщо це потрібно. Хоча специфікатор доступу обмежує доступ до членів базового класу певним чином, але він робить дані більш безпечними. Одиночне успадкування якимось чином простіше і простіше реалізувати, ніж багаторазове успадкування. Успадкування зменшує розмір об'єктного коду, але також впливає на час виконання програми.

Top