Clasa abstractă C ++ și funcția virtuală pură

În acest tutorial, vom învăța despre funcțiile virtuale abstracte și clasele abstracte cu ajutorul exemplelor.

Înainte de a afla despre funcțiile virtuale pure, asigurați-vă că verificați aceste tutoriale:

  • Moștenirea C ++
  • Funcții virtuale C ++

C ++ Funcții virtuale pure

Se folosesc funcții virtuale pure

  • dacă o funcție nu are nicio utilizare în clasa de bază
  • dar funcția trebuie implementată de toate clasele sale derivate

Să luăm un exemplu,

Să presupunem, am derivat Triangle, Squareși Circleclase de Shapeclasă, și dorim să calculeze aria tuturor acestor forme.

În acest caz, putem crea o funcție virtuală pură numită calculateArea()în Shape. Deoarece este o funcție virtuală pură, toate clasele derivate Triangle, Squareși Circletrebuie să includă calculateArea()funcția de punere în aplicare.

O funcție virtuală pură nu are corpul funcției și trebuie să se încheie cu = 0. De exemplu,

 class Shape ( public: // creating a pure virtual function virtual void calculateArea() = 0; );

Notă:= 0 Sintaxa nu înseamnă că sunt 0 atribuirea funcției. Este doar modul în care definim funcțiile virtuale pure.

Clasa abstractă

O clasă care conține o funcție virtuală pură este cunoscută ca o clasă abstractă. În exemplul de mai sus, clasa Shapeeste o clasă abstractă.

Nu putem crea obiecte dintr-o clasă abstractă. Cu toate acestea, putem obține clase din acestea și le putem utiliza membrii de date și funcțiile de membru (cu excepția funcțiilor virtuale pure).

Exemplu: Clasa abstractă C ++ și funcția virtuală pură

 // 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; )

Ieșire

 Introduceți lungimea pentru a calcula aria unui pătrat: 4 Aria pătratului: 16 Introduceți raza pentru a calcula aria unui cerc: 5 Aria cercului: 78,5

În acest program, virtual float calculateArea() = 0;în interiorul Shapeclasei este o funcție virtuală pură.

De aceea trebuie să oferim implementarea calculateArea()în ambele clase derivate, altfel vom primi o eroare.

Articole interesante...