C ++ abstrakt klasse og ren virtuell funksjon

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, Squareog Circleklasser fra Shapeklasse, 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, Squareog Circlemå 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 = 0syntaks 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 Shapeen 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 Shapeklassen.

Det er derfor vi må gi implementeringen av calculateArea()begge våre avledede klasser, ellers får vi en feil.

Interessante artikler...