En virtuell funksjon er en medlemsfunksjon som er definert i basisklassen / overordnet klasse og 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 basisklassen.
La oss se noen 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: basisklasse og avledet klasse.
Baseklassen har en medlemsfunksjon, i.e., vise(). Den avledede klassen arves fra basisklassen og omdefinerte display () -funksjonen.
Deretter har vi erklært en peker til basistypetypen og tildelt et objekt av den avledede klassen. Så når vi kaller display () -funksjonen ved hjelp av baseklassetypepekeren, 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 får se et annet eksempel for å forstå dette.
#inkluderebruker navneområde std;
klasse Base_Class
offentlig:
ugyldig visning ()
cout << "I am in Base class" << endl;
;
klasse Derived_Class: offentlig Base_Class
offentlig:
ugyldig visning ()
cout << "I am in Derived class"
Eksempel 2
I dette eksemplet har vi definert display () -funksjonen som en virtuell funksjon i baseklassen. Den eneste forskjellen fra forrige program er at vi har lagt til et virtuelt nøkkelord foran "void display ()" i basisklassen.
Nå, hvis du ser utdataene, skrives det 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 kalles for et objekt.
#inkluderebruker navneområde std;
klasse Base_Class
offentlig:
virtuelt tomt display ()
cout << "I am in Base class" << endl;
;
klasse Derived_Class: offentlig Base_Class
offentlig:
ugyldig visning ()
cout << "I am in Derived class"
Eksempel 3
Dette er et annet eksempel på en virtuell funksjon. Som du kan se i programmet nedenfor, har vi definert en basisklasse, i.e., Dyr. Det er to avledede klasser: Hund og ku. Vi har definert eat () -funksjonen som virtuell i basisklassen, i.e., Dyr. Vi har da omdefinert eat () -funksjonen i både de avledede klassene, hund og ku. I hovedfunksjonen () har vi en peker av baseklassen, i.e., Animal, og festet deretter den avledede klassen, Dog. Så når vi kaller eat () -funksjonen ved hjelp av baseklasspekeren, kan vi påkalle den avledede klasseversjonen av eat () -funksjonen, i.e., eat () -funksjonen fra hundeklassen. Tilsvarende, når vi fester Cow-klasseobjektet, kan vi påberope oss den avledede klasseversjonen av eat () -funksjonen, dvs.e., eat () -funksjonen fra Cow-klassen. Du kan tydelig se denne oppførselen i utdataene nedenfor.
#inkluderebruker navneområde std;
klasse Dyr
offentlig:
virtuelt tomrom spise ()
cout << "Animal - base class - undefined eating behavior." << endl;
;
klasse Hund: offentlig dyr
offentlig:
ugyldig spise ()
cout << "Dog - eat non-veg!" << endl;
;
klasse Ku: offentlig dyr
offentlig:
ugyldig spise ()
cout << "Cow - eat veg!"
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å kjøretid / dynamisk polymorfisme. I denne artikkelen har vi bare sett på begrepet virtuell funksjon og hvordan man kan oppnå polymorfisme i løpetid. Jeg har forklart tre arbeidseksempler for å forklare virtuell funksjon.