Virtuaalne funktsioon on liikmefunktsioon, mis on määratletud põhiklassis / vanemklassis ja uuesti määratletud tuletatud klassis. Virtuaalfunktsioon võimaldab funktsiooni tuletatud klassi versiooni kutsumist viite või kursori abil baasklassi.
Vaatame mõningaid näiteid virtuaalse funktsiooni mõiste mõistmiseks.
Esimeses näites näeme mitte-virtuaalse funktsiooni käitumist ja siis teises näites selgitame virtuaalse funktsiooni käitumist.
Näide 1
Järgmises näite koodis on meil kaks klassi: põhiklass ja tuletatud klass.
Baasklassil on liikme funktsioon, st.e., kuva (). Tuletatud klass on päritud baasklassist ja määratles uuesti funktsiooni display ().
Seejärel oleme deklareerinud kursori baasklassi tüübile ja määranud tuletatud klassi objekti. Niisiis, kui kutsume funktsiooni display () baasklassi tüüpi osuti abil, siis kutsutakse põhiklassi funktsioon. Väljundit näete allpool.
Kuid sellistel juhtudel pakub C ++ võimalust tuletatud klassifunktsiooni kutsumiseks, kuulutades baasklassi funktsiooni virtuaalseks. Selle mõistmiseks näeme veel ühte näidet.
# kaasatanimeruumi kasutamine std;
klass Base_Class
avalik:
tühine kuva ()
cout << "I am in Base class" << endl;
;
klass Tuletatud_klass: avalik alus_klass
avalik:
tühine kuva ()
cout << "I am in Derived class"
Näide 2
Selles näites oleme määranud funktsiooni display () baasklassi virtuaalse funktsioonina. Ainus erinevus eelmisest programmist on see, et oleme lisanud baasklassi “void display ()” ette virtuaalse märksõna.
Kui näete väljundit, prindib see: "Olen tuletatud klassis", mis näitab, et tuletatud klassifunktsiooni kutsutakse.
Põhiklassi virtuaalne märksõna (virtuaalne funktsioon) vastutab selle eest, et objektile kutsutaks õige funktsioon.
# kaasatanimeruumi kasutamine std;
klass Base_Class
avalik:
virtuaalne tühine kuva ()
cout << "I am in Base class" << endl;
;
klass Tuletatud_klass: avalik alus_klass
avalik:
tühine kuva ()
cout << "I am in Derived class"
Näide 3
See on veel üks näide virtuaalsest funktsioonist. Nagu näete allpool olevas programmis, oleme määranud baasklassi, st.e., Loom. Tuletatud klassi on kaks: koer ja lehm. Oleme määranud funktsiooni eat () baasklassi virtuaalseks, s.t.e., Loom. Seejärel oleme mõlema tuletatud klassi - Koer ja Lehm - funktsiooni eat () uuesti määratlenud. Funktsioonis main () on meil baasklassi kursor, s.t.e., Loom ja kinnitas seejärel tuletatud klassi Koer. Niisiis, kui kutsume funktsiooni eat () baasklassi kursori abil, võime kasutada funktsiooni eat () tuletatud klassi versiooni, st.e., funktsioon Koer klassist söö (). Sarnaselt saame lehma klassi objekti kinnitamisel kutsuda funktsiooni eat () tuletatud klassi versiooni, st.e., Lehmade klassi funktsioon eat (). Sellist käitumist näete selgelt allpool olevast väljundist.
# kaasatanimeruumi kasutamine std;
klassi loom
avalik:
virtuaalne tühjus sööma ()
cout << "Animal - base class - undefined eating behavior." << endl;
;
klassi koer: avalik loom
avalik:
tühine sööma ()
cout << "Dog - eat non-veg!" << endl;
;
klass Lehm: avalik loom
avalik:
tühine sööma ()
cout << "Cow - eat veg!"
a_ptr-> sööma ();
tagastama 0;
Järeldus
Selles artiklis olen selgitanud virtuaalse funktsiooni mõistet C-s++. C ++ toetab erinevat tüüpi polümorfismi - staatilist polümorfismi ja dünaamilist polümorfismi. Virtuaalse funktsiooni abil saame saavutada käituse / dünaamilise polümorfismi. Selles artiklis oleme vaadelnud ainult virtuaalse funktsiooni kontseptsiooni ja seda, kuidas saavutada käituse polümorfismi. Virtuaalse funktsiooni selgitamiseks olen selgitanud kolme toimivat näidet.