En virtuell funktion är en medlemsfunktion som definieras i basklassen / föräldraklassen och omdefinieras i den härledda klassen. Virtuell funktion gör det möjligt att anropa den härledda klassversionen av funktionen med referens eller pekare till basklassen.
Låt oss se några exempel för att förstå begreppet virtuell funktion.
I det första exemplet kommer vi att se beteendet hos den icke-virtuella funktionen, och sedan i det andra exemplet kommer vi att förklara beteendet hos en virtuell funktion.
Exempel 1
I följande exempelkod har vi två klasser: basklass och härledd klass.
Basklassen har en medlemsfunktion, dvs.e., visa(). Den härledda klassen ärvs från basklassen och omdefinierade funktionen display ().
Sedan har vi förklarat en pekare till basklassens typ och tilldelat ett objekt från den härledda klassen. Så när vi kallar display () -funktionen med basklasspekaren kommer basklassfunktionen att kallas. Du kan se utdata nedan.
Men i sådana fall ger C ++ ett sätt att anropa den härledda klassfunktionen genom att förklara basklassfunktionen som virtuell. Vi kommer att se ett annat exempel för att förstå detta.
#omfattaanvänder namnrymd std;
klass Base_Class
offentlig:
ogiltig visning ()
cout << "I am in Base class" << endl;
;
klass Derived_Class: public Base_Class
offentlig:
ogiltig visning ()
cout << "I am in Derived class"
Exempel 2
I det här exemplet har vi definierat display () -funktionen som en virtuell funktion i basklassen. Den enda skillnaden från det föregående programmet är att vi har lagt till ett virtuellt nyckelord framför "void display ()" i basklassen.
Nu, om du ser utdata, skrivs det ut, "Jag är i härledd klass", vilket indikerar att den härledda klassfunktionen kallas.
Det virtuella nyckelordet (virtuell funktion) i basklassen ansvarar för att säkerställa att rätt funktion anropas för ett objekt.
#omfattaanvänder namnrymd std;
klass Base_Class
offentlig:
virtuell tomrumsvisning ()
cout << "I am in Base class" << endl;
;
klass Derived_Class: public Base_Class
offentlig:
ogiltig visning ()
cout << "I am in Derived class"
Exempel 3
Detta är ett annat exempel på en virtuell funktion. Som du kan se i programmet nedan har vi definierat en basklass, dvs.e., Djur. Det finns två härledda klasser: Hund och ko. Vi har definierat funktionen eat () som virtuell i basklassen, dvs.e., Djur. Vi har sedan omdefinierat eat () -funktionen i både de härledda klasserna Hund och Ko. I huvudfunktionen () har vi en pekare av basklassen, dvs.e., Animal, och bifogade sedan den härledda klassen, Dog. Så när vi kallar funktionen eat () med basklasspekaren kan vi åberopa den härledda klassversionen av eat () -funktionen, i.e., funktionen eat () från hundklassen. På samma sätt, när vi fäster objektet Cow-klass kan vi sedan åberopa den härledda klassversionen av funktionen eat (), dvs.e., funktionen eat () från Cow-klassen. Du ser tydligt detta beteende i utdata nedan.
#omfattaanvänder namnrymd std;
klass Djur
offentlig:
virtuellt tomrum äta ()
cout << "Animal - base class - undefined eating behavior." << endl;
;
klass Hund: offentligt djur
offentlig:
ogiltig äta ()
cout << "Dog - eat non-veg!" << endl;
;
klass Ko: offentligt djur
offentlig:
ogiltig äta ()
cout << "Cow - eat veg!"
a_ptr-> äta ();
returnera 0;
Slutsats
I den här artikeln har jag förklarat begreppet virtuell funktion i C++. C ++ stöder olika typer av polymorfism - statisk polymorfism och dynamisk polymorfism. Med hjälp av en virtuell funktion kan vi uppnå runtime / dynamisk polymorfism. I den här artikeln har vi bara tittat på begreppet virtuell funktion och hur man kan uppnå polymorfism under körning. Jag har förklarat tre arbetsexempel för att förklara virtuell funktion.