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 wykonawczego/dynamicznego. Zobaczymy kilka przykładów, aby zrozumieć pojęcie funkcji wirtualnej w C++.

Funkcja wirtualna to funkcja członka, która jest zdefiniowana w klasie podstawowej/podstawowej i ponownie zdefiniowana w klasie pochodnej. Funkcja wirtualna umożliwia wywołanie pochodnej wersji funkcji za pomocą odniesienia lub wskaźnika do klasy podstawowej.

Zobaczmy kilka przykładów, aby zrozumieć pojęcie funkcji wirtualnej.

W pierwszym przykładzie zobaczymy zachowanie funkcji niewidocznej, a następnie w drugim przykładzie wyjaśnimy zachowanie funkcji wirtualnej.

Przykład 1

W poniższym przykładowym kodzie mamy dwie klasy: klasa podstawowa i klasa pochodna.

Klasa podstawowa ma funkcję członka, i.mi., wyświetlacz(). Klasa pochodna jest dziedziczona po klasie podstawowej i na nowo zdefiniowana funkcja display ().

Następnie zadeklarowaliśmy wskaźnik do typu klasy podstawowej i przypisaliśmy obiekt klasy pochodnej. Tak więc, gdy wywołamy funkcję display () za pomocą wskaźnika typu klasy podstawowej, funkcja klasy podstawowej zostanie wywołana. Możesz zobaczyć dane wyjściowe poniżej.

Ale w takich przypadkach C ++ zapewnia sposób wywołania funkcji klas pochodnej poprzez deklarowanie funkcji klasy podstawowej jako wirtualną. Zobaczymy kolejny przykład, aby to zrozumieć.

#włączać
za pomocą przestrzeni nazw Std;
klasa base_class

publiczny:
void wyświetlacz ()

Cout << "I am in Base class" << endl;

;
klasa Derived_Class: public base_class

publiczny:
void wyświetlacz ()

Cout << "I am in Derived class" powrót 0;

Przykład 2

W tym przykładzie zdefiniowaliśmy funkcję display () jako funkcję wirtualną w klasie podstawowej. Jedyną różnicą od poprzedniego programu jest to, że dodaliśmy wirtualne słowo kluczowe przed „void display ()” w klasie podstawowej.

Teraz, jeśli zobaczysz wyjście, drukuje: „Jestem w klasie pochodnej”, co wskazuje, że wywołana funkcja klasy pochodnej jest wywoływana.

Wirtualne słowo kluczowe (funkcja wirtualna) w klasie podstawowej jest odpowiedzialna, aby upewnić się, że właściwa funkcja jest wywoływana dla obiektu.

#włączać
za pomocą przestrzeni nazw Std;
klasa base_class

publiczny:
Virtual Void Display ()

Cout << "I am in Base class" << endl;

;
klasa Derived_Class: public base_class

publiczny:
void wyświetlacz ()

Cout << "I am in Derived class" powrót 0;

Przykład 3

To kolejny przykład funkcji wirtualnej. Jak widać w poniższym programie, zdefiniowaliśmy klasę podstawową, i.mi., Zwierzę. Istnieją dwie pochodne klasy: pies i krowa. Zdefiniowaliśmy funkcję eat () jako wirtualną w klasie podstawowej, i.mi., Zwierzę. Następnie na nowo zdefiniowaliśmy funkcję EAT () w klasach pochodnych, psach i krowie. W funkcji Main () mamy wskaźnik klasy podstawowej, i.mi., Zwierzę, a następnie przywiązało klasę pochodną, ​​pies. Tak więc, kiedy wywołujemy funkcję eat () za pomocą wskaźnika klasy podstawowej, możemy wywołać funkcję Opiełą klasę, i.mi., Funkcja EAT () z klasy psów. Podobnie, kiedy dołączamy obiekt klasy krowy, możemy następnie wywołać pochodną wersję funkcji eat (), i.mi., Funkcja EAT () z klasy krów. Możesz wyraźnie zobaczyć to zachowanie w poniższym wyjściu.

#włączać
za pomocą przestrzeni nazw Std;
Zwierzę klasowe

publiczny:
Virtual Void Eat ()

Cout << "Animal - base class - undefined eating behavior." << endl;

;
Pies klasowy: zwierzę publiczne

publiczny:
void Eat ()

Cout << "Dog - eat non-veg!" << endl;

;
Krowa klasowa: zwierzę publiczne

publiczny:
void Eat ()

Cout << "Cow - eat veg!" a_ptr = new Cow ();
a_ptr-> eat ();
powrót 0;

Wniosek

W tym artykule wyjaśniłem koncepcję funkcji wirtualnej w C++. C ++ obsługuje różne typy polimorfizmu - polimorfizm statyczny i dynamiczny polimorfizm. Za pomocą funkcji wirtualnej możemy osiągnąć polimorfizm wykonawczy/dynamiczny. W tym artykule przyjrzeliśmy się jedynie koncepcji funkcji wirtualnej i sposobowi osiągnięcia polimorfizmu w środowisku wykonawczym. Wyjaśniłem trzy przykłady działające w celu wyjaśnienia funkcji wirtualnej.