C ++ abstrakt klasse og ren virtuel funktion

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, Squareog Circleklasser fra Shapeklassen, 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, Squareog Circleskal 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 = 0syntaks 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 Shapeen 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 Shapeklassen en ren virtuel funktion.

Derfor skal vi give implementeringen af calculateArea()begge vores afledte klasser, ellers får vi en fejl.

Interessante artikler...