C ++ Funksjon Overstyring

C Function Overriding



I denne artikkelen vil vi dekke funksjonsoverstyring i programmeringsspråket C ++. C ++ støtter kjøretids polymorfisme.

Ved funksjonsoverstyring definerer barneklassen funksjonen som allerede er definert i foreldreklassen.







Det gjør det mulig for programmereren å gi avledet klassespesifikk funksjonalitet (selv om den er definert i baseklassen).



Nå vil vi se noen eksempler og forstå funksjonsoverstyrende konsept i C ++.



Eksempel-1

Jeg har definert to klasser i eksempelkoden nedenfor - en basisklasse og en avledet klasse. Baseklassen har en medlemsfunksjon, dvs. disp (). Derived_Class arves fra Base_Class. Disp () -funksjonen er tilstede i Base_Class og deretter definert på nytt i Derived_Class.





I hovedfunksjonen () opprettes et objekt i Derived_Class, dvs. d,. Deretter kaller vi disp () -funksjonen på det avledede klasseobjektet, så funksjonen i den avledede klassen vil bli påkalt. Basisklasseversjonen ignoreres her. Du kan se funksjonen output as - disp () nedenfor i den avledede klassen.

#inkludere

ved hjelp av navneområde std;

// grunnklasse
klasse Base_Class
{
offentlig:
tomromnytte()
{
koste<< 'disp () -funksjon i basisklassen.' <<endl;
}

};

// avledet klasse
klasse Derived_Class:offentlig Base_Class
{
offentlig:
tomromnytte()
{
koste<< 'disp () -funksjon i avledet klasse' <<endl;
}
};

inthoved-()
{
Derived_Class d;
d.nytte(); // disp () -funksjon på avledet klasseobjekt
komme tilbake 0;
}



Eksempel-2

I dette eksemplet vil vi se hvordan vi bevisst kaller baseklasseversjonen av funksjonen gjennom det avledede klasseobjektet. I den avledede klassefunksjonsdefinisjonen bruker vi operatøren for oppløsning av omfanget [::] til å kalle baseklasseversjonen av funksjonen.

#inkludere

ved hjelp av navneområde std;

klasse Base_Class
{
offentlig:
tomromnytte()
{
koste<< 'disp () -funksjon i basisklassen.' <<endl;
}

};

klasse Derived_Class:offentlig Base_Class
{
offentlig:
tomromnytte()
{
Base_Class::nytte(); // Ring basisklasseversjonen av disp ()
}
};

inthoved-()
{
Derived_Class d;
d.nytte();
komme tilbake 0;
}

Eksempel-3

Dette er et annet eksempel på funksjonsoverstyring. I dette eksemplet har vi opprettet en foreldreklasse - dyr og to avledede klasser - and og hund. Basisklassen, det vil si Dyrklassen, har en medlemsfunksjonslyd ().

I den avledede klassen/barneklassen, det vil si Hund, har vi omdefinert den samme funksjonen, dvs. lyd (), for å overstyre grunnklassedefinisjonen. På samme måte har vi i den andre avledede klassen, det vil si Duck, definert den samme funksjonen, dvs. lyd ().

I hovedfunksjonen () har vi opprettet hundeobjektet Dog and and of Duck. Så når vi kaller lydfunksjonen () for hund og and, vil den avledede klasseversjonen av lydfunksjonen () ringe. Du kan se utdataene fra programmet som vist nedenfor. Så ved hjelp av funksjonen som overstyrer, kan vi påkalle den avledede klassespesifikke funksjonen.

#inkludere

ved hjelp av navneområde std;

klasse dyr
{
offentlig:
tomromlyd()
{
koste<< 'Dyrelyd!' <<endl;
}

};

// Avledet klasse - Hundeklasse
klasse hund:offentlig dyr
{
offentlig:
tomromlyd()
{
koste<< 'Hundelyd - bark.' <<endl;
}
};

// Avledet klasse - Andklasse
klasse And:offentlig dyr
{
offentlig:
tomromlyd()
{
koste<< 'Andelyd - kvaksalver.' <<endl;
}
};


inthoved-()
{
Hundehund;
Andand;

hund.lyd(); // lyd () av ​​hund
and.lyd(); // lyd () av ​​and

komme tilbake 0;
}

Konklusjon

I denne artikkelen har jeg forklart funksjonsoverstyring i C ++ . C ++ - språket støtter kjøringstidspolymorfisme. Funksjonsoverstyring bidrar til å oppnå kjøretiden polymorfisme i C ++. Denne artikkelen så på begrepet funksjonsoverstyring og hvordan du oppnår polymorfisme ved bruk av funksjon overstyring.