mulighet for en klasse å utlede egenskaper og karakteristikker fra en annen klasse kalles Arv. Arv er en av de viktigste funksjonen av Objekt-Orientert Programmering.
Sub-Klasse: klasse som arver egenskaper fra en annen klasse kalles Sub-klasse eller Avledet Klasse.
Super Klasse:klasse med egenskapene arves av sub-klasse kalles Base-Klasse eller Super klasse.
artikkelen er delt inn i følgende underemner:
- Hvorfor og når du bruker arv?,
- Modi av Arv
- Typer Arv
Hvorfor og når du bruker arv?
Vurdere en gruppe av kjøretøy. Du trenger for å lage klasser for Buss, Bil og Lastebil. Metodene fuelAmount(), kapasitet(), applyBrakes() vil være de samme for alle de tre klassene., Hvis vi skaper disse klassene unngå arv så må vi skrive alle disse funksjonene i hver av de tre klassene som vist i figur nedenfor:
Du kan tydelig se at over prosessen resulterer i duplisering av samme kode 3 ganger. Dette øker sjansene for feil og dataredundans. For å unngå denne type situasjon, arv, blir brukt., Hvis vi lage en klasse Kjøretøy og skrive disse tre funksjonene i det og arve resten av klasser fra kjøretøy klasse, så vi kan rett og slett unngå duplisering av data og øke re-brukervennlighet. Se på diagrammet nedenfor der de tre klassene er arvet fra kjøretøy klasse:
ved Hjelp av arv, er vi nødt til å skrive inn funksjoner bare én gang, i stedet for tre ganger så vi har arvet resten av tre klasser fra base-klasse(Kjøretøy).,
Implementering av arv i C++: For å skape et sub-klasse som er arvet fra base class vi har til å følge de nedenfor syntaks.
Syntaks:
class subclass_name : access_mode base_class_name{ //body of subclass};
Her subclass_name er navnet på den sub-klasse, access_mode er modusen som du ønsker å arve denne sub-klasse for eksempel: offentlig, privat etc. og base_class_name er navnet på basen klasse som du ønsker å arve sub-klasse.
Merk: En avledet klasse ikke arve tilgang til private data medlemmer., Men det betyr arve en full overordnede objektet, som inneholder alle private medlemmer som klasse erklærer.
Output:
Child id is 7Parent id is 91
I ovennevnte program ‘Barn’ klasse er offentlig arvet fra «Foreldre» class, slik at den offentlige data medlemmer av klasse «Foreldre» vil også bli arvet av klassen ‘Barn’.
Modi av Arv
- Offentlig modus: Hvis vi utlede en sub-klasse fra en offentlig base klasse., Så publikum medlem av base-klasse vil bli offentlig i avledet klasse og beskyttet medlemmer av base-klasse vil bli beskyttet i avledet klasse.
- Beskyttet modus: Hvis vi utlede en sub-klasse fra en Beskyttet base klasse. Så både offentlige medlem og beskyttet medlemmer av base-klasse vil bli beskyttet i avledet klasse.
- Privat-modus: Hvis vi utlede en sub-klasse fra en Egen base klasse. Så både offentlige medlem og beskyttet medlemmer av base-klasse vil bli Private i avledet klasse.,
Merk : privat medlemmer i basen klasse kan ikke være direkte tilgjengelig i avledet klasse, mens beskyttet medlemmer kan få direkte tilgang til. For eksempel, klasse B, C og D inneholder alle variablene x, y og z i nedenfor et eksempel. Det er bare spørsmål om tilgang.,
tabellen nedenfor oppsummerer de ovennevnte tre moduser og viser tilgang specifier av medlemmer av base klasse i sub-klasse når avledet av det offentlige, beskyttet og privat modus:
Typer Arv i C++
Et spesielt tilfelle av hybrid arv : Multipath arv:
En avledet klasse med to basen klasser, og disse to base klasser har en felles base-klasse kalles multipath arv. En tvetydighet som kan arrise i denne typen arv.,
du Vurdere følgende program:
Output:
A from ClassB : 10A from ClassC : 100B : 20C : 30D : 40
I eksempelet ovenfor, både ClassB & ClassC arve ClassA, de har begge én kopi av ClassA. Men ClassD arve både ClassB & ClassC, derfor ClassD har to kopier av ClassA, en fra ClassB og en annen fra ClassC.,
Hvis vi trenger å få tilgang til data medlem av ClassA gjennom objektet av ClassD, må vi angi banen fra der en vil være tilgjengelig, enten det er fra ClassB eller ClassC, bco ‘ z kompilatoren ikke kan skille mellom to kopier av ClassA i ClassD.
Det er 2 måter å unngå dette tvetydighet:
- Bruk omfang oppløsning operatør
- Bruke virtuelle base klasse
Unngå tvetydighet ved hjelp av omfang oppløsning operatør:
ved Hjelp av omfang oppløsning operatør vi kan manuelt angi banen fra hvilke data som medlem vil være tilgjengelig, som vist i utsagn 3 og 4, i eksempelet ovenfor.,
obj.ClassB::a = 10;
obj.ClassC::a = 100;
Merk : Likevel, det er to kopier av ClassA i ClassD.,
Unngå tvetydighet ved hjelp av virtuelle base-klasse:
Output:
A : 100B : 20C : 30D : 40
i Henhold til ovennevnte eksempel, ClassD har bare ett eksemplar av ClassA, derfor, utsagn 4 vil overskrive verdien av en gitt på utsagn 3.
Denne artikkelen er levert av Sterke Agarwal. Hvis du liker GeeksforGeeks og ønsker å bidra, kan du også skrive en artikkel med contribute.geeksforgeeks.org eller e-post artikkelen din til [email protected]., Se artikkelen din vises på den GeeksforGeeks hovedsiden og hjelpe andre Geeks.
Oppmerksomhet leser! Ikke slutte å lære nå. Få tak i alle de viktige C++ Foundation og STL konsepter med C++ Foundation og STL kurs hos student-vennlig pris og blitt industri klar.