In deze tutorial leren we met behulp van voorbeelden over abstracte virtuele functies en abstracte klassen.
Bekijk deze tutorials voordat we meer leren over pure virtuele functies:
- C ++ overerving
- C ++ virtuele functies
C ++ Pure virtuele functies
Er worden puur virtuele functies gebruikt
- als een functie geen nut heeft in de basisklasse
- maar de functie moet worden geïmplementeerd door al zijn afgeleide klassen
Laten we een voorbeeld nemen,
Stel, we hebben afgeleid Triangle
, Square
en Circle
klassen van de Shape
klasse, en we willen het gebied van al deze vormen te berekenen.
In dit geval kunnen we een pure virtuele functie maken met de naam calculateArea()
in de Shape
. Omdat het een puur virtuele functie, alle afgeleide klassen Triangle
, Square
en Circle
moet het onder andere calculateArea()
functie bij de uitvoering.
Een puur virtuele functie heeft niet de functie body en moet eindigen op = 0
. Bijvoorbeeld,
class Shape ( public: // creating a pure virtual function virtual void calculateArea() = 0; );
Opmerking: de = 0
syntaxis betekent niet dat we 0 aan de functie toewijzen. Het is gewoon de manier waarop we pure virtuele functies definiëren.
Abstracte klasse
Een klasse die een puur virtuele functie bevat, staat bekend als een abstracte klasse. In het bovenstaande voorbeeld is de klasse Shape
een abstracte klasse.
We kunnen geen objecten van een abstracte klasse maken. We kunnen er echter klassen van afleiden en hun gegevensleden en lidfuncties gebruiken (behalve pure virtuele functies).
Voorbeeld: C ++ abstracte klasse en pure virtuele functie
// 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; )
Uitvoer
Voer de lengte in om de oppervlakte van een vierkant te berekenen: 4 Oppervlakte van een vierkant: 16 Voer de straal in om de oppervlakte van een cirkel te berekenen: 5 Oppervlakte van een cirkel: 78,5
In dit programma zit virtual float calculateArea() = 0;
binnen de Shape
klas een pure virtuele functie.
Daarom moeten we de implementatie van calculateArea()
in beide van onze afgeleide klassen voorzien, anders krijgen we een foutmelding.