GeeksforGeeks (Magyar)

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:

  1. miért és mikor kell használni az öröklést?,
  2. öröklési módok
  3. ö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

  1. 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.
  2. 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.
  3. 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:

  1. a hatálya felbontás üzemeltető
  2. 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.

cikk címkék:

C++
gyakorlati címkék:

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük