Сравнителна таблица
Основа за сравнение | Единично наследяване | Многократно наследяване |
---|---|---|
Основен | Извлеченият клас наследява един основен клас. | Извлеченият клас наследява два или повече от един базов клас. |
изпълнение | Клас der_class: access_specifier базов клас | Клас, изведен _class: access_specifier base_class1, access_specifier base_class2, .... |
достъп | Извлечен клас достъп до характеристиките на един основен клас | Извлечен клас достъп до комбинираните характеристики на наследени базови класове |
видимост | Публично, частно, защитено | Публично, частно, защитено |
Време за изпълнение | Изисква се малко количество време за работа над главата | Изисква допълнителни разходи за изпълнение в сравнение с единичното наследяване |
Определение за единично наследяване
В единичното наследяване има един основен клас и един извлечен клас. Извлеченият клас наследява базовия клас или публично, и защитено. Членовете на базовия клас могат да бъдат достъпни от извлечен клас според спецификатора за достъп, определен по време на наследяването на базовия клас.
Нека да имаме пример от реалния живот, имаме два класа, "клас на сметка" и "клас на спестовни сметки". Тук "спестяване клас клас" може да наследи характеристиката на "класа на сметка", така че "клас клас" клас ще стане база / супер / родител клас за спестяване на клас на сметка, и "спестяване клас клас" ще бъде извлечен клас.
Тук атрибутите на "класа на акаунта" са acc_no (private) и balance (public), а членските функции са initialize (), get_accno (), които са публични. Сега, "класа на сметката" се наследява на "спестяване клас клас" публично, така, всички публични член на "сметка клас" могат да бъдат пряко достъпни чрез "спестяване клас клас". Той може да осъществи достъп до частния член на „класа на сметката“ чрез публични членски функции на „класа на акаунта“, но не може да има достъп до тях директно.
Прилагане на единично наследяване:
# включва използването на пространство за име std; class Account {int acc_no, ; публичен: плаващ баланс; void инициализиране (int x, int y) {acc_no = x; баланс = Y; } int get_accno. () {return acc_no; }}; клас Saving_acc: публичен профил {float intrest_rate; public: // конструктор на Saving_acc клас Saving_acc (int c) {interest_rate = c; } void display () {cout <Дефиниция на множествено наследяване
Множественото наследяване позволява на производния клас да наследява комбинирани характеристики на повече от един базов клас, т.е. имаме единичен изведен клас и множество базови класове. Всеки базов клас трябва да се наследи чрез споменаване на отделния спецификатор за всеки от тях. Производен клас може да осъществи достъп до членовете на базовите класове на базата на спецификатора за достъп, чрез който базовият клас се наследява.
Нека го направим по-лесно с примера имаме три класа т.е. Bike, Car и Vehicle. Сега „превозно средство” може да наследи характеристиките на „Bike”, както и на „Car”. Така „превозно средство” става извлечен клас, а „байк” и „кола” се превръщат в основен клас. Сега, "Bike" и "Car" са публично наследени от "Vehicle", той може да има достъп до всички публични членове на "Bike" и "Car", но тъй като имаме обект Model_no, защитен в "Car", така че е частен за Car, но може да бъде достъпен от „Превозно средство“.
Прилагане на множествено наследяване:
# включва използването на пространство от имена std; клас Bike {int engine_cost; ; public: void set_engine_cost (int x) {engine_cost = x; }}; клас Car {защитен: int Model_no; public: void set_Model_no (int p) {Model_no = p; }}; Клас Vehical: обществен Bike, обществен автомобил {int no_of_wheels public: vehical (int w) {no_of_wheels = w; cout << "без колела" <Основни разлики между единично и множествено наследяване
- Единичното наследяване е един производен клас, имащ един основен клас, докато при множественото наследяване има два или повече от два основни класа, но единичен извлечен клас.
- Множественото наследяване е доста объркващо, тъй като тук един производен клас наследява два или повече базови класа. Ако базовите класове имат атрибут или функция с едно и също име, тогава за извлечения клас става трудно да се определи кой атрибут или функция на базовия клас трябва да извлече.
- Проблемите с режийни разходи са по-малки в случай на единично наследяване. Но в случай на множествено наследяване конструкцията на обекта или унищожаването извиква конструкторите и деструктора на родителския клас в йерархията на класа, който увеличава натоварването.
- Единичното наследяване е повече към специализация. Докато множественото наследяване е повече към генерализация.
- Тъй като единичното наследяване има по-малко натоварване, то има по-малко време за изпълнение в сравнение с множественото наследяване.
заключение
Наследяването прави работата на програмиста лесна, тъй като ако един клас вече е формиран, неговите характеристики могат да бъдат адаптирани от други, ако е необходимо. Въпреки че спецификаторът за достъп ограничава достъпа до членовете на базовия клас по определен начин, но това прави данните по-сигурни. Единичното наследяване е по-просто и по-лесно за реализиране от множественото наследяване. Наследяването намалява размера на обектния код, но също така влияе върху времето за изпълнение на програмата.