C ++ Arv

C Inheritance



Arv är ett mycket viktigt inslag i objektorienterad programmering. Det gör det möjligt för programmeraren att härleda en klass från en befintlig klass. Detta är mycket användbart, särskilt i ett stort komplext projekt eftersom det tillåter programmeraren att återanvända koden.

I den här artikeln kommer vi att diskutera arvskonceptet i C ++ - programmering. Vi kommer att förklara begreppet vänfunktionen i C ++ med arbetsexempel.







Varför arv?

Arv gör det möjligt att skapa en ny klass eller härledd klass från en annan klass eller basklass. Den härledda klassen eller barnklassen kommer att ha alla funktioner i föräldraklassen eller basklassen. Vi kan återanvända koden med hjälp av arv.



Typ av arv

Det finns olika typer av arv:



  1. Enkelt/enda arv
  2. Hierarkiskt arv
  3. Arv på flera nivåer
  4. Multipel arv

I den här artikeln kommer vi att överväga endast enkelt/enda arv.





Exempel 1:

Låt oss nu titta på ett exempelprogram för att förstå begreppet arv i C ++. Vi har definierat en basklass och sedan härlett en annan klass från den. Därför kommer den härledda klassen att ha funktionerna (medlemmar och funktioner) från basklassen.

#omfatta

med namnutrymme std;

klass Base_Class
{
offentlig:
inti;
tomhetvisa()
{
kosta<< 'Visning av basklass' <<i<<endl;
}

};

class Derived_Class:offentlig Base_Class
{
offentlig:
tomhetshow()
{
kosta<< 'Show of Derived Class' <<endl;
}
};

inthuvud()
{
Derived_Class dc;
dc.i = 100;
dc.visa();
dc.show();

lämna tillbaka 0;
}



Exempel 2:

Detta är ett annat exempel på arv i C ++. I det här exemplet kommer vi att se hur konstruktörerna kallas när ett härledt klassobjekt skapas.

Som du kan se nedan har vi definierat två basklasskonstruktörer och tre härledda klasskonstruktörer. Du kan tydligt märka från utmatningen nedan att basklasskonstruktorn kallas först innan den härledda klasskonstruktorn anropas.

#omfatta
med namnutrymme std;

klass Base_Class
{
offentlig:
Base_Class()
{
kosta<< 'Base_Class - Inga parametrar' <<endl;
}
Base_Class(intx)
{
kosta<< 'Base_Class - Parametrar:' <<x<<endl;
}
};

class Derived_Class:offentlig Base_Class
{
offentlig:
Derived_Class()
{
kosta<< 'Derived_Class - Inga parametrar' <<endl;
}
Derived_Class(intoch)
{
kosta<< 'Derived_Class - Parametrar:' <<och<<endl;
}
Derived_Class(intx,intoch):Base_Class(x)
{
kosta<< 'Param of Derived_Class:' <<och<<endl;
}
};

inthuvud()
{
Derived_Class d(7,19);
}

Exempel 3:

I det här exemplet kommer vi att se hur härledda klassobjekt kan användas.

Som du kan se finns det två klasser definierade: Rectangle_Class och Cube_Class. Rectangle_Class är basklassen från vilken den härledda klassen, dvs Cube_Class härleds. Därför ärver vi funktionerna från Rectangle_Class till Cube_Class.

Du kan också märka att vi ärver Cube_Class med den offentliga åtkomstkontrollen. Detta innebär att den härledda klassen kan komma åt alla icke-privata medlemmar i basklassen.

Vi har deklarerat ett objekt för den härledda klassen och kallar sedan metoderna från basklassen, det vill säga setLength () och setBreadth ().

#omfatta

med namnutrymme std;

klass Rectangle_Class
{
privat:
intlängd;
intbredd;
offentlig:
Rektangel_Klass();
Rektangel_Klass(intde,intb);
Rektangel_Klass(Rektangel_Klass&r);
intgetLength()
{
lämna tillbakalängd;
}
intgetBreadth()
{
lämna tillbakabredd;
}
tomhetsetLength(intde);
tomhetsetBreadth(intb);
intområde();
};

klass Cube_Class:offentlig Rectangle_Class
{
privat:
inthöjd;
offentlig:
Cube_Class(inth)
{
höjd=h;
}
intgetHeight()
{
lämna tillbakahöjd;
}
tomhetsetHeight(inth)
{
höjd=h;
}
intvolym()
{
lämna tillbakagetLength()*getBreadth()*höjd;
}
};


Rektangel_Klass::Rektangel_Klass()
{
längd=1;
bredd=1;
}
Rektangel_Klass::Rektangel_Klass(intde,intb)
{
längd=de;
bredd=b;
}
Rektangel_Klass::Rektangel_Klass(Rektangel_Klass&r)
{
längd=r.längd;
bredd=r.bredd;
}
tomhetRektangel_Klass::setLength(intde)
{
längd=de;
}
tomhetRektangel_Klass::setBreadth(intb)
{
bredd=b;
}
intRektangel_Klass::område()
{
lämna tillbakalängd*bredd;
}

inthuvud()
{
Cube_Class c(8);
c.setLength(12);
c.setBreadth(9);
kosta<<'Volymen är'<<c.volym()<<endl;
}

Slutsats:

I den här artikeln har jag förklarat begreppet arv i C ++ . C ++ stöder olika typer av arv inklusive flera arv (dvs. ärvande funktioner från flera basklasser eller föräldraklasser). För att göra det enklare har jag dock bara övervägt ett enda arv här. Jag har visat tre arbetsexempel för att förklara hur vi kan använda arv i C ++-programmering och återanvända koden. Dessutom är detta en mycket användbar funktion hos C ++.