Einführung in Virtual Keyword in C ++

Ein virtuelles Schlüsselwort in C ++ wird verwendet, um eine virtuelle Funktion in C ++ zu erstellen. Die virtuelle Funktion ist die übergeordnete Klassenfunktion, die wir in der untergeordneten Klasse neu definieren möchten. Die virtuelle Funktion wird mit dem Schlüsselwort virtual deklariert. Wenn wir die virtuelle Funktion definieren, soll das Schlüsselwort virtual in der Deklaration der Funktion vorgehen. Das virtuelle Schlüsselwort weist den Compiler an, eine späte Bindung oder eine dynamische Verknüpfung für die Funktion durchzuführen.

Der einzelne Zeiger muss auf alle Objekte verschiedener Klassen verweisen. Daher wird der Zeiger auf der Oberklasse erstellt, um auf alle Objekte der abgeleiteten Klasse zu verweisen, und der Oberklassenzeiger enthält dann die Adresse des Objekts der abgeleiteten Klasse, auf dem immer die Oberklassenfunktion ausgeführt wird. Um dies zu beheben, verwenden wir die virtuelle Funktion. Wenn also die virtuelle Funktion in der Superklasse erstellt wird, identifiziert der C ++ - Compiler, welche Funktion zur Laufzeit ausgeführt werden soll, und die Identifikation der Funktion erfolgt anhand des Objekttyps, auf den der Superklassenzeiger zeigt.

Virtuelle Funktion

Die virtuellen Funktionen der Syntax sind nachfolgend aufgeführt:

Syntax

class name_class
(
public :
virtual return fun(arg1, arg2, ..)
(
//code inside the function
)
)

Wie in der Syntax wird fun () durch das Schlüsselwort virtual deklariert, was bedeutet, dass die untergeordnete Klasse dieselben Methoden neu definieren kann.

Programm 1:

#include
using namespace std;
class A
(
public:
void disp()
(
cout << " Message from the class A\n ";
)
);
class B :public A
(
public:
void disp()
(
cout << "Message from the class B\n";
)
);
int main()
(
A* obj1; // super class pointer
B obj2; // child class object
obj1 = &obj2;
obj1-> disp(); // Late Binding Occurs
)

Ausgabe:

Im obigen Programm hat die Oberklasse A die Funktion disp (), die in der abgeleiteten Klasse B umgeschrieben wird. In der Hauptfunktion ruft die Methode disp () das Objekt obj1 auf (das eine dynamische Bindung oder eine späte Bindung ist. Dynamische Bindung ist ein Prozess, in dem zur Laufzeit entschieden wird, welche bestimmte Funktion ausgeführt werden soll, und die disp () - Funktion der Klasse A ausgeführt wird.

Programm 2:

#include
using namespace std;
class A
(
public:
virtual void disp()
(
cout << " Message from the class A \n ";
)
);
class B :public A
(
public:
void disp()
(
cout << "Message from the class B\n";
)
);
int main()
(
A* obj1; // super class pointer
B obj2; // child class object
obj1 = &obj2;
obj1-> disp(); // Dynamic Binding Ocuurs
)

Ausgabe:

Der obige Programmcode ist die Änderung des Programms 1, die disp () -Funktion wird mit dem Schlüsselwort virtual definiert und nun, wenn das Objekt die disp () -Funktion aufruft, die disp () -Funktion der untergeordneten Klasse B ausgeführt.

Programm 3:

#include
using namespace std;
class A
(
public:
virtual void disp()
(
cout << " Message from the class A\n ";
)
);
class B :public A
(
public:
virtual void disp()
(
cout << "Message from the class B\n";
)
);
int main()
(
A* obj1; // super class pointer
B obj2; // child class object
obj1 = &obj2;
obj1-> disp(); // Dynamic Binding Ocuurs
)

Ausgabe:

Der obige Programmcode ist die Änderung des Programms 2, der disp () -Funktion, die ebenfalls mit dem Schlüsselwort virtual in Klasse B neu definiert wird, und jetzt, wenn das Objekt 1 die disp () -Funktion aufruft, der disp () -Funktion der untergeordneten Klasse B ausgeführt wird.

Als nächstes schreiben wir das Programm für die rein virtuelle Funktion. Die reine virtuelle Funktion ist eine Funktion, für die don keine Implementierungen hatte. Die reine virtuelle Funktion wird auch abstrakte virtuelle Funktion genannt. Die reine virtuelle Funktionsdeklaration weist 0 zu, wie im folgenden Code gezeigt:

Programm 4:

#include
using namespace std;
class A
(
public:
virtual void disp()=0;
);
class B :public A
(
public:
void disp()
(
cout << "Message from the class B\n";
)
);
int main()
(
A* obj1; // super class pointer
B obj2; // child class object
obj1 = &obj2;
obj1-> disp(); // Dynamic Binding Ocuurs
)

Ausgabe:

Vorteile des virtuellen Schlüsselworts in C ++

  • Virtuelle Funktionen werden verwendet, um Laufzeitpolymorphismus zu erzielen.
  • Wenn eine Klasse von einer Klasse mit einer virtuellen Funktion abgeleitet ist, kann die Funktionsdefinition in der abgeleiteten Klasse neu definiert werden.

Regeln für virtuelle Schlüsselwörter in C ++

  • Das Virtual-Schlüsselwort in C ++ wird in der Funktionsdeklaration verwendet.
  • Virtuelle Funktionen müssen Klassenmitglieder sein.
  • Die virtuelle Funktion, auf die über Objektzeiger zugegriffen wird.
  • Die virtuelle Funktion kann nicht als statisch deklariert werden.
  • Die virtuelle Funktion kann Freunde einer anderen Klasse sein.
  • Wenn die virtuelle Funktion in der Oberklasse nicht verwendet wird, können wir sie auch in der Oberklasse definieren.
  • Die Signatur einer virtuellen Funktion der Oberklasse und der untergeordneten Klassen sollte dieselbe sein, die als Funktionsüberschreibung bezeichnet wird. Wenn die beiden Funktionen denselben Namen, aber eine unterschiedliche Signatur haben, wird dies als überladene Funktion in C ++ betrachtet.
  • Wir können einen virtuellen Destruktor haben, aber keinen virtuellen Konstruktor.

Fazit

  • Ein virtuelles Schlüsselwort in C ++ wird verwendet, um eine virtuelle Funktion in C ++ zu erstellen.
  • Die virtuelle Funktion ist die übergeordnete Klassenfunktion, die wir in der untergeordneten Klasse neu definieren möchten.
  • Der einzelne Zeiger muss auf alle Objekte verschiedener Klassen verweisen.
  • Der Superklasse-Zeiger enthält die Adresse des Objekts der abgeleiteten Klasse. Führen Sie immer die Superklasse-Funktion aus.
  • Die virtuellen Funktionen müssen Klassenmitglieder sein, müssen Klassenmitglieder sein, können nicht als statisch deklariert werden, auf die über Objektzeiger zugegriffen wird.
  • Die Signatur einer virtuellen Funktion der Oberklasse und der untergeordneten Klassen sollte dieselbe sein, die als Funktionsüberschreibung bezeichnet wird. Wenn die beiden Funktionen denselben Namen, aber eine unterschiedliche Signatur haben, wird dies als überladene Funktion in C ++ betrachtet.

Empfohlene Artikel

Dies ist eine Anleitung zum Schlüsselwort Virtual in C ++. Hier diskutieren wir die Einführung und die Vorteile des virtuellen Schlüsselworts in C ++ zusammen mit seiner Syntax der virtuellen Funktion. Sie können auch unsere anderen Artikelvorschläge durchgehen, um mehr zu erfahren -

  1. Methodenüberschreibung in C #
  2. Vererbung in C #
  3. C # -Befehle
  4. Java-Befehle
  5. In Java überschreiben
  6. Polymorphismus in Java
  7. Top 11 Features und Vorteile von C ++