Všetko, čo potrebujete vedieť o dedičnosti v C ++



Tento článok vám poskytne podrobné a komplexné vedomosti o dedičnosti v C ++, o rôznych typoch a spôsoboch ich implementácie.

C ++ je objektovo orientovaný jazyk. Abstrakcia údajov, polymorfizmus, zapuzdrenie a dedičnosť sú základnými kameňmi OOP. V tomto príspevku pochopíme, čo je dedičstvo? Typy dedenia v C ++ a všetky potrebné koncepty s ním súvisiace od začiatku. Na záver sa pozrieme aj na nevýhodu tohto silného konceptu a pokúsime sa ho vyriešiť.

Čo je to dedenie v C ++

Dedenie je jedným z najsilnejších a najbežnejšie používaných konceptov v C ++ alebo v akomkoľvek inom objektovo orientovanom jazyku. Pochopenie tejto koncepcie si vyžaduje malú znalosť tried a predmetov. Pomocou dedenia môžeme vytvoriť triedu, ktorá sa skladá zo všeobecných metód a atribútov. Túto triedu môžu dediť iné triedy obsahujúce konkrétnejšie metódy.





Dedenie v C ++

Týmto spôsobom nemusíme písať stále rovnaké funkcie, čo šetrí čas a zvyšuje čitateľnosť kódu.



Syntax:

trieda odvodená_trieda: prístupový_typ základná_trieda {// telo triedy}

Základná trieda: Trieda, ktorá sa skladá zo všetkých všeobecných metód a atribútov, ktoré môžu zdieľať iné triedy, aby zvýšili čitateľnosť kódu, sa nazýva základná trieda.

zlúčiť triedenie v c ++

Odvodená trieda: Trieda, ktorá pozostáva z konkrétnejších metód a dedí triedu, sa nazýva odvodená trieda. Odvodená trieda môže byť tiež základnou triedou pre inú odvodenú triedu.



Ak vytvoríme triedu XYZ, s niektorými atribútmi a metódami. Študent triedy bude mať teraz nejaké ďalšie atribúty, ale bude obsahovať aj prvky triedy XYZ a to isté platí pre fakultnú triedu. Pozrime sa na diagram:

Študentská a fakultná trieda teda bude dediť z XYZ.

Špecifikátor prístupu Pochopili sme, ako môže trieda zdediť inú triedu. Niektorí ľudia však môžu povedať, že ide o nebezpečnú metódu, pretože všetky atribúty a metódy základnej triedy alebo nadradenej triedy sú zdieľané s podradenou triedou alebo odvodenou triedou. Napríklad ak triedu „banka“ zdedia trieda „zákazníci“ a „investori“. Atribúty triedy „Banka“, ako napríklad „trezorové heslo“, ďalšie informácie týkajúce sa zákazníkov a súkromné ​​údaje, sa zdieľajú s „zákazníkmi“ a „investormi“, čo je nebezpečné.

Na vyriešenie vyššie uvedeného problému C ++ používa špecifikátory prístupu na obmedzenie prístupu k atribútom základnej triedy k odvodenej triede. V C ++ sú celkovo 3 typy špecifikátorov prístupu

  1. Verejné
  2. Súkromné
  3. Chránené

Nasledujúca tabuľka vám poskytne dobré informácie o tom, k akým typom údajov môže mať odvodená trieda prístup podľa rôznych špecifikátorov prístupu.

Špecifikátor prístupu Verejné údaje Súkromné ​​údaje Chránené údaje
Súkromné Nededí saNededí saNededí sa
Chránené Chránené Súkromné Chránené
Verejné Verejné Súkromné Chránené

Jednotné dedičstvo

Samostatné dedičstvo možno považovať za formu obyčajného vanilkového dedičstva. V prípade jednoduchého dedičstva dedí jedna trieda zo základnej triedy.

#include using namespace std class Train {int Numberofwheels int Numberofcoaches public: void Traininfo (int n, int m) {Numberofwheels = n Numberofcoaches = m} void showinfo () {cout<Tento prípad dedičstva sa nazýva viacúrovňové dedičstvo. Trieda medzi prvou a poslednou triedou je tiež známa ako prechodná základná trieda.Čo si myslíte, môže posledná trieda zdediť členov prvej triedy? Áno, môže

#include using namespace std class First {protected: int a public: void getinfofirst (int x) {a = x} void showinfofirst () {std :: cout<< 'Value of a = ' < 

Výkon:

Hodnota a = 10

obrátiť číslo v jave

Hodnota b = 20

Hodnota c = 30

Hodnota d = 50

Hierarchické dedičstvo

Určité problémy nemožno vyriešiť pomocou jedno alebo viacúrovňového dedičstva. V hierarchickom dedení dedí viac ako 1 trieda z jednej základnej triedy.

#include using namespace std class College {public: College () {cout<< 'We are in class College' << endl } } class Student: public College { } class Faculty: public College { } int main() { Student student Faculty faculty return 0 }

Výkon:

Sme v triede College

Sme v triede College

Viacnásobné dedenie v C ++

V hierarchickej dedičnosti sme videli, že jedna základná trieda mala viac ako jednu odvodenú triedu. Vo viacnásobnom dedičstve má jedna odvodená trieda viac ako jednu základnú triedu.

#include using namespace std class One {protected: int a public: void getinfoOne (int x) {a = x}} class two {protected: int b public: void getinfoTwo (int y) {b = y}} class Main: public One, public Two {public: void Display () {std :: cout<< 'Value of a = ' < V tejto chvíli dobre rozumieme všetkým typom dedičnosti používaným v C ++. Ale počkajte, čo ak chceme použiť dva rôzne typy dedičstva? Je to možné? Áno, je to možné pomocou hybridnej dedičnosti. V hybridnom dedičstve kombinujeme 2 rôzne typy dedičstva. Napríklad - Viacúrovňové a viacnásobné dedičstvo, Hierarchické a viacnásobné dedičstvo atď.

#include using namespace std class World {protected: int a public: void getinfoWorld (int x) {a = x}} class Continent: public World {protected: int b public: void getinfoContinent (int y) {b = y}} trieda Krajina {chránené: int d verejné: void getinfoCountry (int m) {d = m}} trieda Austrália: verejné Kontinent, verejné Krajina {verejné: void Display () {std :: cout<< 'Value of a = ' < 

Poďme pochopiť vyššie uvedený diagram, ktorý nám pomôže porozumieť problému s diamantmi. trieda B a trieda C dedí z triedy A, takže trieda A aj trieda B majú atribúty a metódy triedy A. ak trieda D dedí z triedy B aj triedy C. trieda D bude mať všetky atribúty triedy B a triedy C Má tiež všetky atribúty triedy A zdedenej z triedy B aj triedy C. Preto ak urobíme objekt triedy D a zavoláme metódu triedy A. vznikne nejednoznačná situácia a kompilátor bude zmätený odkiaľ malo by to byť metódou triedy A, z triedy B alebo triedy D.

ako vytvoriť triedu singleton v jave

Na vyriešenie tejto nejednoznačnosti používame koncept nazývaný virtuálna základná trieda. Keď vytvoríme základnú triedu virtuálnej základnej triedy, dedí sa iba jedna kópia tejto triedy bez ohľadu na počet existujúcich ciest medzi virtuálnou základnou triedou a odvodenou triedou.

trieda A {} trieda B: virtuálne verejné A {} trieda C: virtuálne verejné A {} trieda D: verejné C, verejné D {}

Týmto sa dostávame na koniec tohto článku Dedenie v C ++. Ak sa chcete dozvedieť viac, pozrite si Edureka, dôveryhodná online vzdelávacia spoločnosť. Výcvikový a certifikačný kurz Edureka Java J2EE a SOA je navrhnutý tak, aby vás vyškolil pre základné aj pokročilé koncepty Java spolu s rôznymi rámcami Java, ako je Hibernate & Spring.

Máte na nás otázku? Uveďte to prosím v sekcii komentárov tohto blogu a my sa vám ozveme čo najskôr.