Virtuaalifunktio on jäsenfunktio, joka on määritelty perusluokassa / pääluokassa ja määritelty uudelleen johdetussa luokassa. Virtuaalitoiminto sallii funktion johdetun luokan version kutsumisen käyttäen viittausta tai osoitinta perusluokkaan.
Katsotaanpa muutama esimerkki virtuaalitoiminnon käsitteen ymmärtämiseksi.
Ensimmäisessä esimerkissä näemme ei-virtuaalisen funktion käyttäytymisen ja sitten toisessa esimerkissä selitämme virtuaalisen funktion käyttäytymisen.
Esimerkki 1
Seuraavassa esimerkkikoodissa meillä on kaksi luokkaa: perusluokka ja johdettu luokka.
Perusluokalla on jäsenfunktio, so.e., näyttö(). Johdettu luokka peritään perusluokasta ja määrittelee uudelleen display () -funktion.
Sitten olemme ilmoittaneet osoittimen perusluokan tyypille ja osoittaneet johdetun luokan objektin. Joten, kun kutsumme näyttö () -funktion perusluokan tyypin osoittimen avulla, kutsutaan perusluokkatoiminto. Näet tuotoksen alla.
Mutta tällaisissa tapauksissa C ++ tarjoaa tavan kutsua johdettu luokkafunktio julistamalla perusluokkatoiminto virtuaaliseksi. Näemme toisen esimerkin tämän ymmärtämiseksi.
#sisältääkäyttämällä nimitilaa vakio;
luokka Base_Class
julkinen:
mitätön näyttö ()
cout << "I am in Base class" << endl;
;
luokka Johdettu_luokka: julkinen pohja-luokka
julkinen:
mitätön näyttö ()
cout << "I am in Derived class"
Esimerkki 2
Tässä esimerkissä olemme määrittäneet display () -funktion virtuaaliseksi funktioksi perusluokassa. Ainoa ero edelliseen ohjelmaan on, että olemme lisänneet virtuaalisen avainsanan "void display ()" -kentän eteen perusluokkaan.
Jos näet lähdön, se tulostaa: "Olen johdetussa luokassa", mikä osoittaa, että johdettua luokan funktiota kutsutaan.
Perusluokan virtuaalinen avainsana (virtuaalifunktio) on vastuussa siitä, että objektille vaaditaan oikea toiminto.
#sisältääkäyttämällä nimitilaa vakio;
luokka Base_Class
julkinen:
virtuaalinen mitätön näyttö ()
cout << "I am in Base class" << endl;
;
luokka Johdettu_luokka: julkinen pohja-luokka
julkinen:
mitätön näyttö ()
cout << "I am in Derived class"
Esimerkki 3
Tämä on toinen esimerkki virtuaalisesta toiminnosta. Kuten alla olevasta ohjelmasta näet, olemme määrittäneet perusluokan, ts.e., Eläin. Johdettuja luokkia on kaksi: Koira ja Lehmä. Olemme määrittäneet eat () -funktion virtuaaliseksi perusluokassa, ts.e., Eläin. Olemme sitten määrittäneet syö () -funktion uudelleen sekä johdetuissa luokissa, koirassa että lehmässä. Main () -funktiossa meillä on perusluokan osoitin, ts.e., Eläin, ja kiinnitti sitten johdetun luokan Koira. Joten, kun kutsumme eat () -funktion perusluokan osoittimen avulla, voimme kutsua syödä () -funktion johdetun luokan version,.e., syö () -toiminto Koiraluokasta. Vastaavasti, kun liitämme lehmäluokkaobjektin, voimme sitten vedota johdetun luokkaversion eat () -funktiosta,.e., syö () -toiminto lehmäluokasta. Voit selvästi nähdä tämän käyttäytymisen alla olevasta lähdöstä.
#sisältääkäyttämällä nimitilaa vakio;
luokan eläin
julkinen:
virtuaalinen tyhjä syödä ()
cout << "Animal - base class - undefined eating behavior." << endl;
;
luokan koira: julkinen eläin
julkinen:
mitätön syödä ()
cout << "Dog - eat non-veg!" << endl;
;
luokka Lehmä: julkinen eläin
julkinen:
mitätön syödä ()
cout << "Cow - eat veg!"
a_ptr-> syödä ();
paluu 0;
Johtopäätös
Tässä artikkelissa olen selittänyt virtuaalitoiminnon käsitteen C: ssä++. C ++ tukee erityyppisiä polymorfismeja - staattista ja dynaamista polymorfismia. Virtuaalitoiminnon avulla voimme saavuttaa ajonaikaisen / dynaamisen polymorfismin. Tässä artikkelissa olemme tarkastelleet vain virtuaalitoiminnon käsitettä ja miten ajonaikaisen polymorfismin aikaansaaminen. Olen selittänyt kolme toimivaa esimerkkiä virtuaalitoiminnon selittämiseksi.