egy osztály azon képességét, hogy egy másik osztály tulajdonságait és jellemzőit Származtassa, öröklésnek nevezzük. Az öröklés az objektumorientált programozás egyik legfontosabb jellemzője.
sub Class:az osztály, amely örökli tulajdonságait egy másik osztály az úgynevezett Sub osztály vagy származtatott osztály.
Super Class: az osztály, amelynek tulajdonságait az alosztály örökölte, Alaposztálynak vagy szuper osztálynak nevezik.
a cikk a következő altípusokra oszlik:
- miért és mikor kell használni az öröklést?,
- öröklési módok
- öröklési típusok
miért és mikor kell használni az öröklést?
fontolja meg a járművek egy csoportját. Létre kell hozni osztályok Busz, Autó, teherautó. A módszerek fuelAmount (), kapacitás (), applyBrakes () ugyanaz lesz mind a három osztály., Ha ezeket az osztályokat létrehozzuk, elkerülve az öröklést, akkor ezeket a funkciókat mind a három osztályba be kell írnunk, az alábbi ábrán látható módon:
egyértelműen láthatja, hogy a fenti folyamat ugyanazon kód 3-szorosának duplikációját eredményezi. Ez növeli a hiba és az adat redundancia esélyét. Az ilyen típusú helyzetek elkerülése érdekében az öröklést használják., Ha létrehozunk egy osztályt Jármű írni ezt a három funkciót, majd öröklik a többi osztályok a jármű osztály, akkor egyszerűen elkerülhető a párhuzamos adatok, valamint növeli újra használhatóság. Nézze meg az alábbi ábrát, amelyben a három osztály a járműosztálytól örökölt:
öröklés használatával a funkciókat csak egyszer kell megírnunk, háromszor helyett, mivel a három osztály többi részét az alaposztályból(jármű) örököltük.,
öröklés végrehajtása C++ – ban: az alaposztályból örökölt alosztály létrehozásához az alábbi szintaxist kell követnünk.
szintaxis:
class subclass_name : access_mode base_class_name{ //body of subclass};
itt az alosztály_neve az alosztály neve, az access_mode az a mód, amelyben például örökölni szeretné ezt az alosztályt: nyilvános, privát stb. a base_class_name pedig annak az alaposztálynak a neve, amelyből az alosztályt örökölni szeretné.
Megjegyzés: egy származtatott osztály nem örökli a hozzáférést a személyes adatok tagjaihoz., Azonban, ez nem örökli a teljes szülő objektum, amely tartalmazza a privát tagok, amelyek az osztály kijelenti.
Teljesítmény:
Child id is 7Parent id is 91
a fenti program a “Gyermek” osztály nyilvánosan örökölt a ‘Szülő’ osztály, így a közérdekű adatok tagjai az osztály ‘Szülő’ is örökölt a osztály “Gyermek”.
öröklési módok
- nyilvános mód: ha egy alosztályt egy nyilvános bázisosztályból származtatunk., Ezután az alaposztály nyilvános tagja nyilvános lesz a származtatott osztályban, az alaposztály védett tagjai pedig származtatott osztályban védettek lesznek.
- Védett mód: Ha egy alosztályt egy védett alaposztályból származtatunk. Ezután mind a nyilvános tag, mind az alaposztály védett tagjai a származtatott osztályban védetté válnak.
- privát mód: ha egy alosztályt egy privát alaposztályból származtatunk. Ezután mind az állami tag, mind az alaposztály védett tagjai magántulajdonban lesznek a származtatott osztályban.,
Megjegyzés: Az alaposztály privát tagjai nem érhetők el közvetlenül a származtatott osztályban, míg a védett tagok közvetlenül elérhetők. Például a B, C és D osztályok mind az alábbi példában az x, y és z változókat tartalmazzák. Ez csak a hozzáférés kérdése.,
Az alábbi táblázat összefoglalja a fenti három mód pedig azt mutatja, hogy a hozzáférés megadása a tagok a base osztály a sub class amikor származtatott nyilvános, védett vagy privát mód:
Típusú Örökség a C++
Egy speciális esete hibrid örökség : Multipath örökség:
Egy származtatott osztály két bázis osztályok, valamint a két bázis osztályok van egy közös alap osztály neve multipath örökség. Az ilyen típusú öröklésben kétértelműség alakulhat ki.,
Fontolja meg a következő programot:
Teljesítmény:
A from ClassB : 10A from ClassC : 100B : 20C : 30D : 40
a fenti példában mindkét ClassB & ClassC örökölni ClassA, mindkettő egyetlen példányát ClassA. Azonban ClassD örökli mindkét ClassB & ClassC, ezért ClassD két példányban ClassA, az egyik a ClassB, a másik a ClassC.,
Ha a classa a adattagját a classd objektumán keresztül kell elérnünk, meg kell adnunk azt az elérési utat, ahonnan az A elérhető lesz, függetlenül attól, hogy a ClassB vagy a ClassC, a bco ‘ z fordító nem tud különbséget tenni a ClassA két példánya között a ClassD-ben.
2 módon, hogy elkerüljék ezt a kétértelműséget:
- a hatálya felbontás üzemeltető
- a virtuális base class
félreértések Elkerülése segítségével hatálya felbontás üzemeltető:
a hatálya felbontás üzemeltető tudunk manuálisan adja meg az elérési útja, ahonnan adatokat tagja lesz elérhető, amint azt a nyilatkozatot, 3, 4, a fenti példában.,
obj.ClassB::a = 10;
obj.ClassC::a = 100;
Megjegyzés : Még mindig van két példányban ClassA, a ClassD.,
a kétértelműség elkerülése a virtuális alaposztály használatával:
kimenet:
A : 100B : 20C : 30D : 40
a fenti példa, Classd csak egy példányát classa, ezért nyilatkozat 4 felülírja az érték A, adott nyilatkozat 3.
Ez a cikk hozzájárult Harsh Agarwal. Ha tetszik GeeksforGeeks szeretne hozzájárulni, akkor is írni egy cikket segítségével contribute.geeksforgeeks.org vagy küldje el a cikket [email protected]., Lásd a cikket megjelenő GeeksforGeeks főoldalon, valamint segít más Geeks.
figyelem olvasó! Ne hagyja abba a tanulást. Szerezd meg az összes fontos C++ Alapítvány és STL koncepciók a C++ Alapítvány és STL tanfolyamok egy diákbarát áron, és lesz ipar kész.