Recomandat, 2023

Alegerea Editorului

Diferența dintre moștenirea unică și cea multiplă

Moștenirea susține puternic conceptul de reutilizare, adică clasa nou creată reutilizează proprietățile celor deja existente. Specificatorul de acces decide modul în care membrul clasei de bază va fi moștenit de clasa derivată. Există multe modalități de a obține moștenirea unică, multiplă, ierarhică, multiplă, hibridă. Întrucât subiectul nostru principal de discuție este diferența dintre moștenirea unică și cea multiplă. În moștenirea singulară, avem o singură clasă de bază care este moștenită de o singură clasă derivată. În moștenire multiplă, avem mai mult de două clase de bază care sunt moștenite combinat de o singură clasă derivată.


Diagramă de comparație

Bazele comparațieiMoștenire singurăMoștenire multiplă
De bazăCategoria derivată moștenește o singură clasă de bază.Categoria derivată moștenește două sau mai multe clase de bază.
Punerea în aplicareClasa class_class: class_address_specifierClasa derivată _class: access_specifier base_class1, access_specifier base_class2, ....
Acces
Clasa derivată are acces la caracteristicile unei clase de bază uniceClasa derivată accesează caracteristicile combinate ale claselor de bază moștenite
VizibilitatePublic, privat, protejatPublic, privat, protejat
Rulați timpulSolicitați o cantitate mică de timp de funcționare peste capNecesită cheltuieli suplimentare de rulare în comparație cu singură moștenire

Definiția singură moștenire

În moștenirea unică, există o singură clasă de bază și o singură clasă derivată. Clasa derivată moștenește clasa de bază fie publică, protejată și privată. Membrii clasei de bază pot fi accesați de o clasă derivată în conformitate cu specificatorul de acces specificat în timpul moștenirii clasei de bază.

Să avem un exemplu real de viață, avem două clase, o "clasă de cont" și o "clasă de cont salvat". Aici "clasa de salvare a contului" poate moșteni caracteristica "clasa cont", astfel încât clasa "clasa cont" va deveni clasa de bază / super / părinte pentru salvarea clasei de cont, iar "clasa de salvare a contului" va fi o clasă derivată.

Aici atributele "clasa contului" sunt acc_no (private) și echilibrul (public), iar funcțiile membrilor sunt initialize (), get_accno () care sunt publice. Acum, "clasa cont" devine moștenit la "salvarea clasei de cont" în mod public, deci toți membrii publici din "clasa de cont" pot fi accesați direct prin "salvarea clasei de cont". Poate accesa membrul privat al "clasei de cont" prin funcțiile publice ale "clasei de cont", dar nu le poate accesa direct.

Implementarea moștenirii unice:

 # includeți utilizarea spațiului de nume std; clasa Cont {int acc_no, ; public: balanța de plăți; void initialize (int x, int y) {acc_no = x; echilibru = y; } int get_accno. () {return acc_no; }}; clasa Saving_acc: public Cont {float intrest_rate; public: // constructor al clasei Saving_acc Saving_acc (int c) {interest_rate = c; } void display () {cout < 

Definiția Multiple Inheritance

Moștenirea multiplă permite clasei derivate să moștenească caracteristici combinate ale mai multor clase de bază, adică avem clase derivate singulare și clase de bază multiple. Fiecare clasă de bază trebuie moștenită prin menționarea specificatorului de acces separat pentru fiecare dintre ele. O clasă derivată poate accesa membrii claselor de bază pe baza specificatorului de acces prin care se moștenește clasa de bază.

Să facem mai ușor cu exemplul că avem trei clase, de exemplu Biciclete, Mașini și Vehicule. Acum, "Vehicle" poate moșteni caracteristicile "Bike" și "Car". Astfel, "Vehicul" devine clasa derivată, iar "Bike" și "Car" devin clasa de bază. Acum, "Bike" și "Car" sunt moștenite public de "Vehicle" și pot accesa toți membrii publici ai "Bike" și "Car", dar avem o entitate Model_no protejată în " accesat de "Vehicul".

Implementarea moștenirii multiple:

 # include utilizarea std namespace; clasa Bike {int engine_cost; ; public: void set_engine_cost (int x) {motor_cost = x; }}; clasa Mașină {protejat: int Model_no; public: void set_Model_no (int p) {Model_no = p; }}; class Vehical: public Bike, mașină publică {int no_of_wheels public: vehical (int w) {no_of_wheels = w; cout << "nr de roți" < 

Diferențele cheie între moștenirea unică și cea multiplă

  1. Moștenirea singulară este o clasă derivată având o singură clasă de bază, în timp ce în moștenire multiplă are două sau mai multe clase de bază, dar o singură clasă derivată.
  2. Moștenirea multiplă este destul de confuză, deoarece aici o singură clasă derivată moșteneste două sau mai multe clase de bază. Dacă clasele de bază au un atribut sau o funcție cu același nume, atunci pentru clasa derivată, devine dificil să se identifice care este atributul sau funcția clasei de bază pe care trebuie să o obțină.
  3. Chestiunile aeriene sunt mai mici în cazul unei singure moșteniri. Dar, în cazul unei moșteniri multiple, construcția sau distrugerea obiectului invocă constructorii și distrugătorul clasei părinte în ierarhia de clasă, ceea ce mărește cheltuielile generale.
  4. Moștenirea singură este mai mult spre specializare. Multi moștenire este mai mult spre generalizare.
  5. Dat fiind faptul că moștenirea unică are mai puțin aeriene, ea are un timp de execuție mai mic comparativ cu moștenirea multiplă.

Concluzie

Moștenirea face ca programatorul să funcționeze ușor, ca și când o clasă este deja formată. Caracteristicile sale pot fi adaptate de alții, dacă este necesar. Deși specificatorul de acces limitează accesul la membrii unei clase de bază într-un anumit mod, dar face ca datele să fie mai sigure. Moștenirea unică este oarecum mai simplă și mai ușor de implementat decât moștenirea multiplă. Moștenirea reduce dimensiunea codului obiect, dar afectează și timpul de execuție al programului.

Top