Virtuelle Variable in C++
Polymorphismus ist eine der Säulen der objektorientierten Programmierung in C++, die eine bestimmte Nachricht in mehr als einer Form anzeigen kann. Wir haben zwei Arten von Polymorphismus – Kompilierzeit und Laufzeit – erreicht durch Funktionsüberladung bzw. Funktionsüberschreibung.
Das Überschreiben von Funktionen beinhaltet jedoch die Verwendung des Schlüsselworts virtual
in C++. Dieser Artikel beschreibt die virtuellen Variablen in C++.
Virtuelle Variable in C++
Polymorphismus kann als etwas beschrieben werden, das viele Formen hat. Ein reales Beispiel für Polymorphismus kann eine Frau sein, die gleichzeitig Mutter, Tochter, Schwester und Schwiegertochter ist.
Aus Sicht der Programmierung kann Polymorphismus jedoch erreicht werden, indem eine Elementfunktion mit demselben oder einem anderen Typ mehr als einmal für verschiedene Zwecke verwendet wird.
Es gibt zwei Arten von Polymorphismus: Die Kompilierzeit, auch als frühe Bindung bekannt, wird durch Funktionsüberladung oder Operatorüberladung erreicht. Einfach ausgedrückt ist es die Möglichkeit, eine Funktion mit demselben Namen, aber mit einer anderen Anzahl oder einem anderen Argumenttyp zu verwenden.
Andererseits wird Laufzeitpolymorphismus durch Überschreiben von Funktionen erreicht.
Das Überschreiben von Funktionen ist die Möglichkeit, eine Funktion mit demselben Namen, Typ und mehreren Argumenten zu verwenden. Dies wird mit dem Schlüsselwort virtual
in C++ erreicht.
Um das Überschreiben von Funktionen zu implementieren, erstellen wir virtuelle Funktionen in C++; In C++ existiert jedoch kein solches Konzept namens virtuelle Variablen.
Virtuelle Funktionen sind diejenigen, die Polymorphismus und keine virtuellen Variablen zulassen. Eine virtuelle Funktion ist eine Memberfunktion, die in der Basisklasse deklariert und in der abgeleiteten Klasse überschrieben wird.
Immer wenn wir mit einem Zeiger auf eine Elternklasse auf ein Kindklassenobjekt verweisen, können wir eine virtuelle Funktion für dieses Objekt aufrufen und die Kindklassenversion (abgeleitete Klassenversion) dieser Funktion ausführen.
In C++ ermöglichen virtuelle Funktionen, dass zwei Klassen unterschiedlichen Typs vom aufrufenden Code als gleich behandelt werden, wobei die Unterschiede im internen Verhalten der Klassen in den virtuellen Funktionen gekapselt werden. Bei virtuellen Variablen wird das Verhalten jedoch durch den Zugriff auf eine Variable gekapselt.
Sie können jedoch Polymorphismus ausführen, indem Sie einfach die virtuelle Funktion in C++ verwenden. Lassen Sie uns den Code dafür sehen.
#include <iostream>
using namespace std;
class parent {
public:
virtual void print() { cout << "printing the parent class function\n"; }
void show() { cout << "showing the parent class function"; }
};
class child : public parent {
public:
void print() { cout << "printing the child class function\n"; }
void show() { cout << "showing the child class function\n"; }
};
int main() {
parent *p;
child c;
p = &c;
p->print();
p->show();
return 0;
}
Ausgang:
printing the child class function
showing the parent class function
Da wir im obigen Codebeispiel auf die untergeordnete Klasse mit dem Zeiger der übergeordneten Klasse verweisen, können wir die virtuelle Funktion für dieses Objekt aufrufen und die untergeordnete Klassenversion der Funktion ausführen.
Daher haben wir die print
-Funktion der übergeordneten Klasse virtuell gemacht, wonach die Funktion, die durch den Aufruf der print()
-Funktion ausgeführt wird, diejenige ist, die sich in der untergeordneten Klasse befindet, während die show()
-Funktion , die nicht virtuell ist, gibt dennoch die übergeordnete Version der Funktion aus.
Abschluss
In diesem Artikel haben wir Polymorphismus, virtuelle Funktionen und virtuelle Variablen in C++ besprochen. Polymorphismus wird in vielen Formen beschrieben und hat zwei Typen – Laufzeit und Kompilierzeit.
Virtuelle Funktionen werden jedoch verwendet, um Laufzeitpolymorphismus in C++ zu implementieren, indem eine Funktion virtuell gemacht wird. Aber es gibt in C++ nichts, was als virtuelle Variablen bezeichnet wird, da es kein Verhalten gibt, das durch den Zugriff auf eine Variable gekapselt werden kann.