Î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 Circle
clase de Shape
clasă, ș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 Circle
trebuie 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 Shape
este 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 Shape
clasei este o funcție virtuală pură.
De aceea trebuie să oferim implementarea calculateArea()
în ambele clase derivate, altfel vom primi o eroare.