
Сравнительная таблица
Основа для сравнения | Одиночное наследование | Множественное наследование |
---|---|---|
основной | Производный класс наследует один базовый класс. | Производный класс наследует два или более двух базовых классов. |
Реализация | Класс производный_класс: базовый класс access_specifier | Производный класс _class: access_specifier base_class1, access_specifier base_class2, .... |
Доступ | Производный класс доступа к функциям одного базового класса | Производные классы доступа к комбинированным функциям унаследованных базовых классов |
видимость | Государственный, Частный, Защищенный | Государственный, Частный, Защищенный |
Время выполнения | Требуется небольшое количество времени выполнения над головой | Требовать дополнительных затрат времени выполнения по сравнению с одиночным наследованием |
Определение единственного наследования
В Единственном наследовании есть единственный базовый класс и единственный производный класс. Производный класс наследует базовый класс либо публично, защищенно и в частном порядке. Доступ к членам базового класса может производный класс в соответствии со спецификатором доступа, указанным при наследовании базового класса.
Давайте рассмотрим пример из реальной жизни: у нас есть два класса: «класс учетной записи» и «класс сберегательной учетной записи». Здесь «класс сохраняемой учетной записи» может наследовать функцию «класса учетной записи», поэтому класс «учетной записи» станет базовым / супер / родительским классом для сохранения класса учетной записи, а «класс сохраняемой учетной записи» будет производным классом.
Здесь атрибуты «класса учетной записи» являются acc_no (private) и balance (public), а функции-члены являются initialize (), get_accno (), которые являются публичными. Теперь «класс учетной записи» публично наследуется для «сохранения класса учетной записи», поэтому все открытые члены «класса учетной записи» могут быть напрямую доступны с помощью «сохранения класса учетной записи». Он может получить доступ к закрытому члену «класса учетной записи» через публичные функции-члены «класса учетной записи», но не может получить к ним доступ напрямую.
Реализация одиночного наследования:
# включить использование пространства имен std; Класс Account {int acc_no, ; публичный: поплавковый баланс; void initialize (int x, int y) {acc_no = x; Баланс = у; } int get_accno. () {return acc_no; }}; class Saving_acc: public Account {float intrest_rate; public: // конструктор класса Saving_acc Saving_acc (int c) {Interest_rate = c; } void display () {cout <Определение множественного наследования
Множественное наследование позволяет производному классу наследовать объединенные признаки более чем одного базового класса, т.е. у нас есть один производный класс и несколько базовых классов. Каждый базовый класс должен быть унаследован, указав отдельный спецификатор доступа для каждого из них. Производный класс может обращаться к членам базовых классов на основе спецификатора доступа, которым наследуется базовый класс.
Давайте сделаем это проще с примером, у нас есть три класса: Bike, Car и Vehicle. Теперь «Автомобиль» может наследовать черты «Велосипеда» так же, как и «Автомобиль». Таким образом, «Автомобиль» становится производным классом, а «Велосипед» и «Автомобиль» становятся базовым классом. Теперь «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: общественный велосипед, общественный автомобиль {int no_of_wheels public: vehical (int w) {no_of_wheels = w; cout << "нет колес" <Ключевые различия между одиночным и множественным наследованием
- Одиночное наследование - это один производный класс, имеющий один базовый класс, тогда как в множественном наследовании имеет два или более двух базовых классов, но один производный класс.
- Множественное наследование довольно запутанно, поскольку здесь один производный класс наследует два или более базовых класса. Если базовые классы имеют атрибут или функцию с тем же именем, что и для производного класса, становится трудно определить, какой атрибут или функцию базового класса он должен получить.
- Затраты на накладные расходы меньше в случае одиночного наследования. Но в случае множественного наследования создание или уничтожение объекта вызывает конструкторов и деструктор родительского класса в иерархии классов, что увеличивает издержки.
- Одиночное наследование больше в сторону специализации. В то время как множественное наследование больше направлено на обобщение.
- Поскольку одиночное наследование имеет меньше накладных расходов, оно имеет меньше времени выполнения по сравнению с множественным наследованием.
Заключение
Наследование облегчает работу программиста, так как если один класс уже сформирован, его функции могут быть адаптированы другим при необходимости. Хотя спецификатор доступа ограничивает доступ к членам базового класса определенным образом, но он делает данные более безопасными. Одиночное наследование как-то проще и проще в реализации, чем множественное наследование. Наследование уменьшает размер объектного кода, но также влияет на время выполнения программы.