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

Выбор редакции

Разница между одиночным и множественным наследованием

Наследование полностью поддерживает концепцию повторного использования, т. Е. Недавно созданный класс повторно использует свойства уже существующих. Спецификатор доступа определяет, каким образом член базового класса будет наследоваться производным классом. Существует много способов достижения наследования: одиночный, множественный, иерархический, многоуровневый, гибридный. В то время как нашей основной темой обсуждения является различие между одиночным и множественным наследованием. При одиночном наследовании у нас есть только один базовый класс, который наследуется только одним производным классом. При множественном наследовании у нас есть более двух базовых классов, которые вместе наследуются только одним производным классом.


Сравнительная таблица

Основа для сравненияОдиночное наследованиеМножественное наследование
основнойПроизводный класс наследует один базовый класс.Производный класс наследует два или более двух базовых классов.
РеализацияКласс производный_класс: базовый класс 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 << "нет колес" < 

Ключевые различия между одиночным и множественным наследованием

  1. Одиночное наследование - это один производный класс, имеющий один базовый класс, тогда как в множественном наследовании имеет два или более двух базовых классов, но один производный класс.
  2. Множественное наследование довольно запутанно, поскольку здесь один производный класс наследует два или более базовых класса. Если базовые классы имеют атрибут или функцию с тем же именем, что и для производного класса, становится трудно определить, какой атрибут или функцию базового класса он должен получить.
  3. Затраты на накладные расходы меньше в случае одиночного наследования. Но в случае множественного наследования создание или уничтожение объекта вызывает конструкторов и деструктор родительского класса в иерархии классов, что увеличивает издержки.
  4. Одиночное наследование больше в сторону специализации. В то время как множественное наследование больше направлено на обобщение.
  5. Поскольку одиночное наследование имеет меньше накладных расходов, оно имеет меньше времени выполнения по сравнению с множественным наследованием.

Заключение

Наследование облегчает работу программиста, так как если один класс уже сформирован, его функции могут быть адаптированы другим при необходимости. Хотя спецификатор доступа ограничивает доступ к членам базового класса определенным образом, но он делает данные более безопасными. Одиночное наследование как-то проще и проще в реализации, чем множественное наследование. Наследование уменьшает размер объектного кода, но также влияет на время выполнения программы.

Top