I denne opplæringen vil vi lære om abstrakte virtuelle funksjoner og abstrakte klasser ved hjelp av eksempler.
Før vi lærer om rene virtuelle funksjoner, må du sjekke disse opplæringene:
- C ++ arv
- C ++ virtuelle funksjoner
C ++ rene virtuelle funksjoner
Det brukes rene virtuelle funksjoner
- hvis en funksjon ikke har noen bruk i baseklassen
- men funksjonen må implementeres av alle dens avledede klasser
La oss ta et eksempel,
Tenk, vi har utledet Triangle
, Square
og Circle
klasser fra Shape
klasse, og vi ønsker å beregne arealet av alle disse formene.
I dette tilfellet kan vi opprette en ren virtuell funksjon som heter calculateArea()
i Shape
. Siden det er en ren virtuell funksjon, alle avledede klasser Triangle
, Square
og Circle
må inneholde calculateArea()
funksjon med gjennomføringen.
En ren virtuell funksjon har ikke funksjonsdelen, og den må ende med = 0
. For eksempel,
class Shape ( public: // creating a pure virtual function virtual void calculateArea() = 0; );
Merk: Den = 0
syntaks betyr ikke at vi tilordner 0 til funksjonen. Det er akkurat slik vi definerer rene virtuelle funksjoner.
Abstrakt klasse
En klasse som inneholder en ren virtuell funksjon er kjent som en abstrakt klasse. I eksemplet ovenfor er klassen Shape
en abstrakt klasse.
Vi kan ikke lage objekter fra en abstrakt klasse. Imidlertid kan vi utlede klasser fra dem, og bruke deres datamedlemmer og medlemsfunksjoner (unntatt rene virtuelle funksjoner).
Eksempel: C ++ abstrakt klasse og ren virtuell funksjon
// 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; )
Produksjon
Angi lengden for å beregne arealet av et kvadrat: 4 Arealet av kvadratet: 16 Angi radius for å beregne arealet av en sirkel: 5 Arealet av sirkelen: 78,5
I dette programmet er det en ren virtuell funksjon virtual float calculateArea() = 0;
inne i Shape
klassen.
Det er derfor vi må gi implementeringen av calculateArea()
begge våre avledede klasser, ellers får vi en feil.