C ++ virtuell funksjon

C ++ virtuell funksjon
I denne artikkelen skal vi diskutere den virtuelle funksjonen på programmeringsspråket C ++. En virtuell funksjon brukes i C ++ for å oppnå den runtime/dynamiske polymorfismen. Vi vil se flere eksempler for å forstå begrepet den virtuelle funksjonen i C++.

En virtuell funksjon er en medlemsfunksjon som er definert i baseklassen/foreldreklassen og er definert på nytt i den avledede klassen. Virtuell funksjon gjør det mulig å ringe den avledede klasseversjonen av funksjonen ved hjelp av referansen eller pekeren til baseklassen.

La oss se noen få eksempler for å forstå begrepet virtuell funksjon.

I det første eksemplet vil vi se oppførselen til den ikke-virtuelle funksjonen, og deretter i det andre eksemplet vil vi forklare oppførselen til en virtuell funksjon.

Eksempel 1

I følgende eksempelkode har vi to klasser: baseklasse og avledet klasse.

Baseklasse har en medlemsfunksjon, jeg.e., vise(). Den avledede klassen er arvet fra baseklassen og omdefinerte Display () -funksjonen.

Deretter har vi erklært en peker til baseklassetypen og tildelt et objekt av den avledede klassen. Så når vi kaller Display () -funksjonen ved hjelp av base -klassetypen pekeren, vil baseklassefunksjonen bli kalt. Du kan se utdataene nedenfor.

Men i slike tilfeller gir C ++ en måte å kalle den avledede klassefunksjonen ved å erklære baseklassefunksjonen som virtuell. Vi vil se et annet eksempel for å forstå dette.

#inkludere
ved hjelp av navneområdet STD;
Klasse Base_Class

offentlig:
void display ()

cout << "I am in Base class" << endl;

;
Klasseded_class: public base_class

offentlig:
void display ()

cout << "I am in Derived class" retur 0;

Eksempel 2

I dette eksemplet har vi definert Display () -funksjonen som en virtuell funksjon i baseklassen. Den eneste forskjellen fra det forrige programmet er at vi har lagt til et virtuelt søkeord foran “Void Display ()” i baseklassen.

Nå, hvis du ser utdataene, skriver den ut "Jeg er i avledet klasse", noe som indikerer at den avledede klassefunksjonen kalles.

Det virtuelle nøkkelordet (virtuell funksjon) i baseklassen er ansvarlig for å sikre at riktig funksjon blir kalt for et objekt.

#inkludere
ved hjelp av navneområdet STD;
Klasse Base_Class

offentlig:
Virtual void display ()

cout << "I am in Base class" << endl;

;
Klasseded_class: public base_class

offentlig:
void display ()

cout << "I am in Derived class" retur 0;

Eksempel 3

Dette er et annet eksempel på en virtuell funksjon. Som du kan se i programmet nedenfor, har vi definert en baseklasse, jeg.e., Dyr. Det er to avledede klasser: hund og ku. Vi har definert EAT () -funksjonen som virtuell i baseklassen, i.e., Dyr. Vi har deretter omdefinert EAT () -funksjonen i både avledede klasser, hund og ku. I hovedfunksjonen har vi en peker i baseklassen, jeg.e., Dyr, og festet deretter den avledede klassen, hunden. Så når vi kaller EAT () -funksjonen ved hjelp av baseklassepekeren, kan vi påkalle den avledede klasseversjonen av EAT () -funksjonen, i.e., EAT () -funksjonen fra hundeklassen. Tilsvarende, når vi fester Cow Class -objektet, kan vi deretter påkalle den avledede klasseversjonen av EAT () -funksjonen, i.e., EAT () -funksjonen fra Cow -klassen. Du kan tydelig se denne oppførselen i utdataene nedenfor.

#inkludere
ved hjelp av navneområdet STD;
Klassedyr

offentlig:
Virtuell tomrom spiser ()

cout << "Animal - base class - undefined eating behavior." << endl;

;
Klassehund: offentlig dyr

offentlig:
tomrom spiser ()

cout << "Dog - eat non-veg!" << endl;

;
Klasseku: offentlig dyr

offentlig:
tomrom spiser ()

cout << "Cow - eat veg!" A_PTR = ny ku ();
a_ptr-> spis ();
retur 0;

Konklusjon

I denne artikkelen har jeg forklart begrepet virtuell funksjon i C++. C ++ støtter forskjellige typer polymorfisme - statisk polymorfisme og dynamisk polymorfisme. Ved hjelp av en virtuell funksjon kan vi oppnå den runtime/dynamiske polymorfismen. I denne artikkelen har vi bare sett på begrepet virtuell funksjon og hvordan vi oppnår runtime -polymorfisme. Jeg har forklart tre arbeidseksempler for å forklare virtuell funksjon.