C++

Funkcja wirtualna C++

Funkcja wirtualna C++
W tym artykule omówimy funkcję wirtualną w języku programowania C++. Funkcja wirtualna jest używana w C++ do osiągnięcia polimorfizmu środowiska wykonawczego/dynamicznego. Zobaczymy kilka przykładów, aby zrozumieć pojęcie funkcji wirtualnej w C++.

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" zwróć 0;

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" zwróć 0;

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 = nowa Krowa();
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ą.

Gry Najlepsze aplikacje do mapowania gamepada dla systemu Linux
Najlepsze aplikacje do mapowania gamepada dla systemu Linux
Jeśli lubisz grać w gry na Linuksie za pomocą gamepada zamiast typowego systemu wprowadzania klawiatury i myszy, jest kilka przydatnych aplikacji dla ...
Gry Przydatne narzędzia dla graczy Linuksa
Przydatne narzędzia dla graczy Linuksa
Jeśli lubisz grać w gry w systemie Linux, prawdopodobnie używałeś aplikacji i narzędzi, takich jak Wine, Lutris i OBS Studio, aby poprawić wrażenia z ...
Gry Zremasterowane gry HD dla Linuksa, które nigdy wcześniej nie zostały wydane na Linuksa
Zremasterowane gry HD dla Linuksa, które nigdy wcześniej nie zostały wydane na Linuksa
Wielu twórców gier i wydawców wymyśla remaster HD starych gier, aby przedłużyć żywotność serii, prosimy fanów o kompatybilność z nowoczesnym sprzętem ...