Funkcja wirtualna to funkcja składowa zdefiniowana w klasie bazowej/klasy nadrzędnej i ponownie zdefiniowana w klasie pochodnej. Funkcja wirtualna umożliwia wywołanie wersji funkcji klasy pochodnej przy użyciu referencji lub wskaźnika do klasy bazowej.
Zobaczmy kilka przykładów, aby zrozumieć pojęcie funkcji wirtualnej.
W pierwszym przykładzie zobaczymy zachowanie funkcji niewirtualnej, a następnie w drugim przykładzie wyjaśnimy zachowanie funkcji wirtualnej.
Przykład 1
W poniższym przykładowym kodzie mamy dwie klasy: klasę bazową i klasę pochodną.
Klasa bazowa ma funkcję składową i.mi., pokaz(). Klasa pochodna jest dziedziczona z klasy bazowej i przedefiniowana funkcja display()().
Następnie zadeklarowaliśmy wskaźnik do typu klasy bazowej i przypisaliśmy obiekt klasy pochodnej. Tak więc, gdy wywołamy funkcję display() za pomocą wskaźnika typu klasy bazowej, zostanie wywołana funkcja klasy bazowej. Możesz zobaczyć wyjście poniżej.
Ale w takich przypadkach C++ umożliwia wywołanie funkcji klasy pochodnej, deklarując funkcję klasy bazowej jako virtual. Zobaczymy inny przykład, aby to zrozumieć.
#zawieraćprzy użyciu standardowej przestrzeni nazw;
class Base_Class
publiczny:
nieważne wyświetlanie()
Cout << "I am in Base class" << endl;
;
class Derived_Class: public Base_Class
publiczny:
nieważne wyświetlanie()
Cout << "I am in Derived class"
Przykład 2
W tym przykładzie zdefiniowaliśmy funkcję display() jako funkcję wirtualną w klasie bazowej. Jedyna różnica w stosunku do poprzedniego programu polega na tym, że dodaliśmy wirtualne słowo kluczowe przed „void display()” w klasie bazowej.
Teraz, jeśli widzisz dane wyjściowe, wyświetla się „Jestem w klasie pochodnej”, co wskazuje, że funkcja klasy pochodnej jest wywoływana.
Słowo kluczowe virtual (funkcja wirtualna) w klasie bazowej jest odpowiedzialne za zapewnienie wywołania właściwej funkcji dla obiektu.
#zawieraćprzy użyciu standardowej przestrzeni nazw;
class Base_Class
publiczny:
wirtualny wyświetlacz pustki ()
Cout << "I am in Base class" << endl;
;
class Derived_Class: public Base_Class
publiczny:
nieważne wyświetlanie()
Cout << "I am in Derived class"
Przykład 3
To kolejny przykład funkcji wirtualnej. Jak widać w poniższym programie, zdefiniowaliśmy klasę bazową, i.mi., Zwierzę. Istnieją dwie klasy pochodne: Pies i Krowa. Zdefiniowaliśmy funkcję eat() jako wirtualną w klasie bazowej, i.mi., Zwierzę. Następnie przedefiniowaliśmy funkcję eat() w obu klasach pochodnych, Dog i Cow. W funkcji main() mamy wskaźnik klasy bazowej, i.mi., Zwierzę, a następnie dołączona klasa pochodna, Dog. Tak więc, kiedy wywołujemy funkcję eat() za pomocą wskaźnika klasy bazowej, możemy wywołać wersję funkcji eat() w klasie pochodnej, i.mi., funkcja eat() z klasy Dog. Podobnie, gdy dołączamy obiekt klasy Cow, możemy następnie wywołać wersję funkcji eat() w klasie pochodnej, i.mi., funkcja eat() z klasy Cow. Możesz wyraźnie zobaczyć to zachowanie na poniższym wyjściu.
#zawieraćprzy użyciu standardowej przestrzeni nazw;
klasa zwierząt
publiczny:
wirtualna pustka jeść ()
Cout << "Animal - base class - undefined eating behavior." << endl;
;
klasa Pies: publiczne zwierzę
publiczny:
nieważne jeść ()
Cout << "Dog - eat non-veg!" << endl;
;
Klasa krowa: zwierzę publiczne!
publiczny:
nieważne jeść ()
Cout << "Cow - eat veg!"
a_ptr->jedz();
zwróć 0;
Wniosek
W tym artykule wyjaśniłem pojęcie funkcji wirtualnej w C++. C++ obsługuje różne typy polimorfizmu - polimorfizm statyczny i polimorfizm dynamiczny. Za pomocą funkcji wirtualnej możemy osiągnąć polimorfizm runtime/dynamiczny. W tym artykule przyjrzeliśmy się tylko koncepcji funkcji wirtualnej i sposobom osiągnięcia polimorfizmu w czasie wykonywania. Wyjaśniłem trzy przykłady robocze, aby wyjaśnić funkcję wirtualną.