En virtuel funktion er en medlemsfunktion, der er defineret i basisklassen / forældreklassen og omdefineret i den afledte klasse. Virtuel funktion gør det muligt at kalde den afledte klasseversion af funktionen ved hjælp af referencen eller markøren til basisklassen.
Lad os se et par eksempler for at forstå begrebet virtuel funktion.
I det første eksempel vil vi se opførelsen af den ikke-virtuelle funktion, og derefter i det andet eksempel vil vi forklare opførelsen af en virtuel funktion.
Eksempel 1
I følgende eksempelkode har vi to klasser: basisklasse og afledt klasse.
Baseklassen har en medlemsfunktion, dvs.e., Skærm(). Den afledte klasse arves fra basisklassen og omdefinerede display () -funktionen.
Derefter har vi deklareret en markør til baseklassetypen og tildelt et objekt fra den afledte klasse. Så når vi kalder display () -funktionen ved hjælp af baseklassetypemarkøren, kaldes baseklassefunktionen. Du kan se output nedenfor.
Men i sådanne tilfælde giver C ++ en måde at kalde den afledte klassefunktion ved at erklære baseklassefunktionen som virtuel. Vi vil se et andet eksempel for at forstå dette.
#omfatteved hjælp af namespace 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 eksempel har vi defineret display () -funktionen som en virtuel funktion i baseklassen. Den eneste forskel fra det forrige program er, at vi har tilføjet et virtuelt nøgleord foran "ugyldigt display ()" i basisklassen.
Nu, hvis du ser output, udskrives det, "Jeg er i afledt klasse", hvilket indikerer, at den afledte klassefunktion kaldes.
Det virtuelle nøgleord (virtuel funktion) i baseklassen er ansvarlig for at sikre, at den rigtige funktion kaldes til et objekt.
#omfatteved hjælp af namespace std;
klasse Base_Class
offentlig:
virtuel tom skærm ()
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 andet eksempel på en virtuel funktion. Som du kan se i nedenstående program, har vi defineret en basisklasse, dvs.e., Dyr. Der er to afledte klasser: Hund og ko. Vi har defineret spise () -funktionen som virtuel i basisklassen, dvs.e., Dyr. Vi har derefter omdefineret spise () -funktionen i både de afledte klasser, Hund og Ko. I hovedfunktionen () har vi en markør i basisklassen, i.e., Animal, og vedhæftede derefter den afledte klasse, Dog. Så når vi kalder funktionen eat () ved hjælp af basisklassemarkøren, kan vi påberåbe den afledte klasseversion af eat () -funktionen, i.e., funktionen eat () fra hundeklassen. På samme måde, når vi vedhæfter objektet Cow-klasse, kan vi derefter påberåbe den afledte klasseversion af eat () -funktionen, dvs.e., funktionen eat () fra klassen Cow. Du kan tydeligt se denne adfærd i output nedenfor.
#omfatteved hjælp af namespace std;
klasse Animal
offentlig:
virtuelt ugyldigt spise ()
cout << "Animal - base class - undefined eating behavior." << endl;
;
klasse Hund: offentligt dyr
offentlig:
ugyldigt spise ()
cout << "Dog - eat non-veg!" << endl;
;
klasse Ko: offentligt dyr
offentlig:
ugyldigt spise ()
cout << "Cow - eat veg!"
a_ptr-> spis ();
returnere 0;
Konklusion
I denne artikel har jeg forklaret begrebet virtuel funktion i C++. C ++ understøtter forskellige typer polymorfisme - statisk polymorfisme og dynamisk polymorfisme. Ved hjælp af en virtuel funktion kan vi opnå runtime / dynamisk polymorfisme. I denne artikel har vi kun set på begrebet virtuel funktion og hvordan man opnår runtime polymorfisme. Jeg har forklaret tre arbejdseksempler til forklaring af virtuel funktion.