Einführung in das virtuelle Schlüsselwort in C++

Einführung in das virtuelle Schlüsselwort 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. Bei der Definition der virtuellen Funktion ist bei der Deklaration der Funktion das Schlüsselwort virtual vorzugehen. Das Schlüsselwort virtual weist den Compiler an, eine späte Bindung oder dynamische Verknüpfung für die Funktion durchzuführen.

Der einzelne Zeiger wird benötigt, um auf alle Objekte verschiedener Klassen zu verweisen. Daher wird der Zeiger auf der Oberklasse erstellt, um auf alle Objekte der abgeleiteten Klasse zu verweisen, und dann enthält der Zeiger der Oberklasse die Adresse des Objekts der abgeleiteten Klasse, die immer die Funktion der Oberklasse ausführt. Um dies zu lösen, verwenden wir die virtuelle Funktion. Wenn also die virtuelle Funktion in der Oberklasse erstellt wird, identifiziert der C++-Compiler, welche Funktion zur Laufzeit ausgeführt werden soll, und die Identifizierung der Funktion basiert auf dem Objekttyp, auf den der Zeiger der Oberklasse zeigt.

Starten Sie Ihren kostenlosen Softwareentwicklungskurs

Webentwicklung, Programmiersprachen, Softwaretests und andere

Virtuelle Funktion

Die virtuellen Funktionen der Syntax sind unten angegeben:

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 <iostream>
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 eine Umschreibung in der abgeleiteten Klasse B ist. In der Hauptfunktion ruft die Methode disp( ) das obj1-Objekt auf (das eine dynamische Bindung oder späte Bindung ist. Dynamisch Binding ist ein Prozess, bei dem zur Laufzeit entschieden wird, welche spezifische Funktion ausgeführt werden soll) und die disp( )-Funktion der Klasse A ausgeführt wird.

Programm Nr. 2

#include <iostream>
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 Funktion disp() wird mit dem Schlüsselwort virtual definiert und wenn nun das obj1 die Funktion disp() aufruft, wird die Funktion disp() der untergeordneten Klasse B ausgeführt.

Programm Nr. 3

#include <iostream>
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, die disp()-Funktion, die ebenfalls mit dem Schlüsselwort virtual in Klasse B neu definiert wird, und jetzt, wenn das obj1 die disp()-Funktion aufruft, die disp()-Funktion der untergeordneten Klasse B wird ausgeführt.

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

Programm Nr. 4

#include <iostream>
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 von virtuellen Schlüsselwörtern in C++

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

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

  • Das Schlüsselwort Virtual 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 aus einer anderen Klasse sein.
  • Wenn die virtuelle Funktion nicht in der Oberklasse verwendet wird, können wir sie auch in der Oberklasse definieren.
  • Die Signatur einer virtuellen Funktion der Oberklasse und der untergeordneten Klassen sollte gleich sein, so genannte Funktionsüberschreibung, sonst werden zwei Funktionen mit demselben Namen, aber unterschiedlicher Signatur, als überladene Funktionen in C++ betrachtet .
  • Wir können einen virtuellen Destruktor haben, aber keinen virtuellen Konstruktor.

Schlussfolgerung

  • 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 wird benötigt, um auf alle Objekte verschiedener Klassen zu verweisen.
  • Der Oberklassenzeiger enthält die Adresse des Objekts der abgeleiteten Klasse, die immer die Oberklassenfunktion ausführt.
  • Die virtuellen Funktionen müssen Klassenmitglieder sein, müssen Klassenmitglieder sein, können nicht als statisch deklariert werden, auf die über Objektzeiger zugegriffen werden kann.
  • Die Signatur einer virtuellen Funktion der Oberklasse und der untergeordneten Klassen sollte gleich sein, so genannte Funktionsüberschreibung, sonst werden zwei Funktionen mit demselben Namen, aber unterschiedlicher Signatur, als überladene Funktionen in C++ betrachtet .