GeeksforGeeks (Svenska)

förmågan hos en klass att härleda egenskaper och egenskaper från en annan klass kallas arv. Arv är en av de viktigaste inslagen i objektorienterad programmering.
underklass: klassen som ärver egenskaper från en annan klass kallas underklass eller härledd klass.
superklass:klassen vars egenskaper ärvs av underklass kallas basklass eller superklass.

artikeln är indelad i följande delämnen:

  1. Varför Och när ska man använda arv?,
  2. Arvsformer
  3. typer av arv

varför och när ska man använda arv?

överväga en grupp av fordon. Du måste skapa klasser för Buss, Bil och lastbil. Metoderna fuelAmount(), kapacitet(), applyBrakes() kommer att vara samma för alla de tre klasserna., Om vi skapar dessa klasser för att undvika arv måste vi skriva alla dessa funktioner i var och en av de tre klasserna som visas i nedanstående figur:

Du kan tydligt se att ovanstående process resulterar i duplicering av samma kod 3 gånger. Detta ökar risken för fel och dataredundans. För att undvika denna typ av situation används arv., Om vi skapar ett Klassfordon och skriver dessa tre funktioner i det och ärver resten av klasserna från fordonsklassen, kan vi helt enkelt undvika dubbelarbete av data och öka återanvändbarheten. Titta på nedanstående diagram där de tre klasserna ärvs från fordonsklass:

med arv måste vi bara skriva funktionerna en gång istället för tre gånger när vi har ärvt resten av de tre klasserna från basklass(fordon).,

implementera arv i C++: för att skapa en underklass som ärvs från basklassen måste vi följa nedanstående syntax.
Syntax:

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

här är subclass_name namnet på underklassen, access_mode är det läge där du vill ärva den här underklassen till exempel: offentlig, privat etc. och base_class_name är namnet på den basklass som du vill ärva underklassen från.
Obs! en härledd klass ärver inte åtkomst till privata datamedlemmar., Det ärver dock ett fullständigt överordnat objekt, som innehåller alla privata medlemmar som klassen förklarar.



Output:

Child id is 7Parent id is 91

i ovanstående program är klassen ”barn” offentligt ärvt från klassen ”förälder” så att de offentliga datamedlemmarna i klassen ”förälder” också ärvs av klassen ”barn”.”.

Arvslägen

  1. offentligt läge: om vi härleder en underklass från en offentlig basklass., Då kommer den offentliga medlemmen i basklassen att bli offentlig i den härledda klassen och skyddade medlemmar i basklassen kommer att skyddas i härledd klass.
  2. skyddat läge: om vi härleder en underklass från en skyddad basklass. Då kommer både offentliga medlemmar och skyddade medlemmar i basklassen att skyddas i härledd klass.
  3. privat läge: om vi härleder en underklass från en privat basklass. Då blir både offentliga medlemmar och skyddade medlemmar i basklassen privata i härledd klass.,

Obs! de privata medlemmarna i basklassen kan inte nås direkt i den härledda klassen, medan skyddade medlemmar kan nås direkt. Till exempel innehåller klasserna B, C och d alla variablerna x, y och z i exemplet nedan. Det handlar bara om tillgång.,

nedanstående tabell sammanfattar ovanstående tre lägen och visar åtkomstspecificeraren för medlemmarna i basklassen i underklassen när den härleds i offentliga, skyddade och privata lägen:

typer av arv i c++

ett specialfall av hybridheriv : Multipath arv:
en härledd klass med två basklasser och dessa två basklasser har en gemensam basklass kallas multipath arv. En tvetydighet kan stiga i denna typ av arv.,

överväga följande program:



utgång:

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

i exemplet ovan har båda classb& classc ärva Classa, de har båda en kopia av Classa. ClassD ärver dock både ClassB & ClassC, därför har ClassD två kopior av ClassA, en från ClassB och en annan från ClassC.,
Om vi behöver tillgång till de uppgifter som en medlem av ClassA genom föremålet för ClassD, måste vi ange sökvägen som en kommer att nås, oavsett om det är från ClassB eller ClassC, bco ’ z kompilatorn inte kan skilja mellan två kopior av ClassA i ClassD.
det finns 2 sätt att undvika denna tvetydighet:

  1. använd scope resolution operator
  2. använd virtual base class

Undvik tvetydighet med scope resolution operator:
använda scope resolution operator vi kan manuellt ange sökvägen från vilken datamedlem A kommer att nås, som visas i uttalande 3 och 4, i ovanstående exempel.,

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



Obs : Det finns fortfarande två kopior av Classa i classd.,
undvika tvetydighet med hjälp av virtuell basklass:



utgång:

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

enligt ovanstående exempel har ClassD endast en kopia av ClassA, därför kommer uttalande 4 att skriva över värdet av Classa.av A, ges vid uttalande 3.

den här artikeln bidrar med hård Agarwal. Om du gillar GeeksforGeeks och vill bidra, kan du också skriva en artikel med contribute.geeksforgeeks.org eller maila din artikel till [email protected]. – herr talman!, Se din artikel som visas på GeeksforGeeks huvudsida och hjälpa andra nördar.

uppmärksamhet läsare! Sluta inte lära dig nu. Få tag på alla viktiga C++ Foundation och STL begrepp med C++ Foundation och STL kurser på ett studentvänligt pris och bli industrin redo.

Artikeltaggar:

C++
Övningstaggar:

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *