In diesem Tutorial lernen wir anhand von Beispielen abstrakte virtuelle Funktionen und abstrakte Klassen kennen.
Bevor wir uns mit reinen virtuellen Funktionen vertraut machen, lesen Sie unbedingt diese Tutorials:
- C ++ Vererbung
- Virtuelle C ++ - Funktionen
C ++ Pure Virtual Functions
Es werden reine virtuelle Funktionen verwendet
- wenn eine Funktion in der Basisklasse keine Verwendung hat
- Die Funktion muss jedoch von allen abgeleiteten Klassen implementiert werden
Nehmen wir ein Beispiel,
Nehmen wir an , wir abgeleitet haben Triangle
, Square
und Circle
Klassen aus der Shape
Klasse, und wir wollen berechnen die Fläche aller dieser Formen.
In diesem Fall können wir eine reine virtuelle Funktion mit dem Namen calculateArea()
in erstellen Shape
. Da es sich um eine rein virtuelle Funktion, alle abgeleiteten Klassen Triangle
, Square
und Circle
müssen die umfassen calculateArea()
Funktion bei der Umsetzung.
Eine reine virtuelle Funktion hat keinen Funktionskörper und muss mit enden = 0
. Beispielsweise,
class Shape ( public: // creating a pure virtual function virtual void calculateArea() = 0; );
Hinweis: Die = 0
Syntax bedeutet nicht, dass wir der Funktion 0 zuweisen. So definieren wir reine virtuelle Funktionen.
Abstrakte Klasse
Eine Klasse, die eine reine virtuelle Funktion enthält, wird als abstrakte Klasse bezeichnet. Im obigen Beispiel ist die Klasse Shape
eine abstrakte Klasse.
Wir können keine Objekte einer abstrakten Klasse erstellen. Wir können jedoch Klassen von ihnen ableiten und ihre Datenelemente und Elementfunktionen verwenden (außer reine virtuelle Funktionen).
Beispiel: C ++ Abstract Class und Pure Virtual Function
// C++ program to calculate the area of a square and a circle #include using namespace std; // Abstract class class Shape ( protected: float dimension; public: void getDimension() ( cin>> dimension; ) // pure virtual Function virtual float calculateArea() = 0; ); // Derived class class Square : public Shape ( public: float calculateArea() ( return dimension * dimension; ) ); // Derived class class Circle : public Shape ( public: float calculateArea() ( return 3.14 * dimension * dimension; ) ); int main() ( Square square; Circle circle; cout << "Enter the length of the square: "; square.getDimension(); cout << "Area of square: " << square.calculateArea() << endl; cout << "Enter radius of the circle: "; circle.getDimension(); cout << "Area of circle: " << circle.calculateArea() << endl; return 0; )
Ausgabe
Geben Sie die Länge ein, um die Fläche eines Quadrats zu berechnen: 4 Fläche des Quadrats: 16 Geben Sie den Radius ein, um die Fläche eines Kreises zu berechnen: 5 Fläche des Kreises: 78,5
In diesem Programm befindet sich virtual float calculateArea() = 0;
innerhalb der Shape
Klasse eine rein virtuelle Funktion.
Deshalb müssen wir die Implementierung calculateArea()
in unseren beiden abgeleiteten Klassen bereitstellen , sonst erhalten wir einen Fehler.