I denne vejledning lærer vi om abstrakte virtuelle funktioner og abstrakte klasser ved hjælp af eksempler.
Før vi lærer om rene virtuelle funktioner, skal du kontrollere disse tutorials:
- C ++ arv
- C ++ virtuelle funktioner
C ++ rene virtuelle funktioner
Der bruges rene virtuelle funktioner
- hvis en funktion ikke har nogen brug i basisklassen
- men funktionen skal implementeres af alle dens afledte klasser
Lad os tage et eksempel,
Antag, vi har udledt Triangle
, Square
og Circle
klasser fra Shape
klassen, og vi ønsker at beregne arealet af alle disse former.
I dette tilfælde kan vi oprette en ren virtuel funktion navngivet calculateArea()
i Shape
. Da det er en ren virtuel funktion, alle afledte klasser Triangle
, Square
og Circle
skal indeholde calculateArea()
funktionen med implementeringen.
En ren virtuel funktion har ikke funktionens krop, og den skal ende med = 0
. For eksempel,
class Shape ( public: // creating a pure virtual function virtual void calculateArea() = 0; );
Bemærk: Den = 0
syntaks betyder ikke at vi tildeler 0 til funktionen. Det er bare den måde, vi definerer rene virtuelle funktioner på.
Abstrakt klasse
En klasse, der indeholder en ren virtuel funktion, er kendt som en abstrakt klasse. I ovenstående eksempel er klassen Shape
en abstrakt klasse.
Vi kan ikke skabe objekter fra en abstrakt klasse. Vi kan dog udlede klasser fra dem og bruge deres datamedlemmer og medlemsfunktioner (undtagen rene virtuelle funktioner).
Eksempel: C ++ abstrakt klasse og ren virtuel funktion
// 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; )
Produktion
Indtast længde for at beregne arealet af en firkant: 4 Areal af kvadratet: 16 Indtast radius for at beregne arealet af en cirkel: 5 Areal af cirklen: 78,5
I dette program er virtual float calculateArea() = 0;
inde i Shape
klassen en ren virtuel funktion.
Derfor skal vi give implementeringen af calculateArea()
begge vores afledte klasser, ellers får vi en fejl.