GeeksforGeeks (Română)

capacitatea unei clase de a obține proprietăți și caracteristici dintr-o altă clasă se numește moștenire. Moștenirea este una dintre cele mai importante caracteristici ale programării orientate pe obiecte.
Clasa Sub: clasa care moștenește proprietăți dintr-o altă clasă se numește clasa Sub sau clasa derivată.
clasa Super: clasa ale cărei proprietăți sunt moștenite de clasa sub se numește clasa de bază sau clasa Super.

Articolul este împărțit în următoarele subtopici:

  1. De ce și când să folosiți moștenirea?,
  2. moduri de moștenire
  3. tipuri de moștenire

De ce și când să folosiți moștenirea?luați în considerare un grup de vehicule. Trebuie să creați clase pentru autobuz, mașină și Camion. Metodele fuelAmount(), capacity (), applyBrakes () vor fi aceleași pentru toate cele trei clase., Dacă vom crea aceste clase evitarea moștenire, atunci trebuie să scrie toate aceste funcții în fiecare dintre cele trei clase după cum se arată în figura de mai jos:

puteți vedea în mod clar că procesul de mai sus rezultate din suprapunerea același cod de 3 ori. Acest lucru crește șansele de eroare și redundanță a datelor. Pentru a evita acest tip de situație, se folosește moștenirea., Dacă creăm un vehicul de clasă și scriem aceste trei funcții în el și moștenim restul claselor din clasa vehiculului, atunci putem evita pur și simplu duplicarea datelor și creșterea reutilizării. Uită-te la diagrama de mai jos, în care cele trei clase sunt moștenite de la clasa vehiculului:

Folosind moștenirea, trebuie să scrie funcții de o singură dată, în loc de trei ori după cum am moștenit restul de trei clase, de la clasa de baza(Vehicul).,

implementarea moștenirii în C++: pentru crearea unei sub-clase care este moștenită din clasa de bază trebuie să urmăm sintaxa de mai jos.
Sintaxa:

class subclass_name : access_mode base_class_name{ //body of subclass};

Aici, subclass_name este numele sub clasa, access_mode este modul în care doriți să moștenească această sub-clasa de exemplu: public, privat etc. și base_class_name este numele clasei de bază din care doriți să moșteniți subclasa.
Notă: o clasă derivată nu moștenește accesul la membrii de date private., Cu toate acestea, moștenește un obiect părinte complet, care conține orice membri privați pe care acea clasă îi declară.



Ieșire:

Child id is 7Parent id is 91

În programul de mai sus „Copilul” clasa este public moștenit de la „Părintele” clasa astfel încât datele publice de membri de clasa „Mamă” va fi, de asemenea, moștenită de clasa „Copil”.

moduri de moștenire

  1. mod Public: dacă derivăm o subclasă dintr-o clasă de bază publică., Apoi, membrul public al clasei de bază va deveni public în clasa derivată, iar membrii protejați ai clasei de bază vor deveni protejați în clasa derivată.
  2. mod protejat: dacă derivăm o subclasă dintr-o clasă de bază protejată. Apoi, atât membrii publici, cât și membrii protejați ai clasei de bază vor deveni protejați în clasa derivată.
  3. mod privat: dacă derivăm o sub-clasă dintr-o clasă de bază privată. Apoi, atât membrii publici, cât și membrii protejați ai clasei de bază vor deveni privați în clasa derivată.,notă: membrii privați din clasa de bază nu pot fi accesați direct în clasa derivată, în timp ce membrii protejați pot fi accesați direct. De exemplu, clasele B, C și D conțin toate variabilele x, y și z în exemplul de mai jos. Este doar o chestiune de acces.,

    tabelul De mai jos sintetizează cele de mai sus trei moduri și arată specificatorul de acces al membrilor clasei de bază în clasa sub atunci când derivate în public, protected și private moduri:

    Tipuri de Moștenire în C++

    Un caz special de hibrid moștenire : Multipath moștenire:
    – O clasă derivată cu două clase de bază și aceste două clase de bază au o bază comună de clasă se numește multipath moștenire. O ambiguitate poate apărea în acest tip de moștenire.,

    luați în Considerare următorul program:

    
    

    
    

    Ieșire:

    A from ClassB : 10A from ClassC : 100B : 20C : 30D : 40

    În exemplul de mai sus, ambele ClassB & ClassC moșteni ClassA, ambele au singur exemplar de ClassA. Cu toate acestea ClassD moștenească ambele ClassB & ClassC, prin urmare ClassD au două exemplare de ClassA, unul din ClassB și altul de la ClassC.,
    Dacă avem nevoie de acces la datele membru de ClassA prin obiect de ClassD, trebuie să specificați calea de la care vor fi accesate, fie că este vorba de ClassB sau ClassC, bco ‘ z compiler nu poate diferenția între doi copii de ClassA în ClassD.
    Există 2 modalități de a evita această ambiguitate:

    1. Utilizați operatorul de rezoluție
    2. Utilizarea virtual în clasa de bază

    Evitând ambiguitatea, folosind operatorul de rezoluție:
    Folosind operatorul de rezoluție putem specifica manual calea de la datele pe care un membru va fi accesate, așa cum se arată în declarație 3 și 4, în exemplul de mai sus.,

    obj.ClassB::a = 10;
    obj.ClassC::a = 100;

    
    

    
    

    Notă : Totuși, există două exemplare de ClassA în ClassD.,
    Evitând ambiguitatea, folosind virtual în clasa de bază:

    
    

    
    

    Ieșire:

    A : 100B : 20C : 30D : 40

    în Conformitate cu exemplul de mai sus, ClassD are doar o copie de ClassA, prin urmare, declarația 4 va suprascrie valoarea de o, având în declarație 3.acest articol este contribuit de Harsh Agarwal. Dacă vă place GeeksforGeeks și ar dori să contribuie, de asemenea, puteți scrie un articol folosind contribute.geeksforgeeks.org sau e-mail la art. [email protected]., Vedeți articolul dvs. care apare pe pagina principală GeeksforGeeks și ajutați alți Geeks.

    cititor de atenție! Nu te opri din învățat acum. Faceți rost de toate conceptele importante C++ Foundation și STL cu cursurile C++ Foundation și STL la un preț prietenos pentru studenți și deveniți gata pentru industrie.

    articolul Tag-uri:

    c++
    practica Tag-uri:

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *