In questo tutorial, impareremo le funzioni virtuali astratte e le classi astratte con l'aiuto di esempi.
Prima di apprendere le funzioni virtuali pure, assicurati di controllare questi tutorial:
- Eredità C ++
- Funzioni virtuali C ++
Funzioni virtuali pure C ++
Vengono utilizzate funzioni virtuali pure
- se una funzione non ha alcun uso nella classe base
- ma la funzione deve essere implementata da tutte le sue classi derivate
Facciamo un esempio,
Supponiamo, abbiamo derivato Triangle, Squaree Circlele classi dalla Shapeclasse, e vogliamo calcolare l'area di tutte queste forme.
In questo caso, possiamo creare una funzione virtuale pura denominata calculateArea()in Shape. Dal momento che è una funzione virtuale pura, tutte le classi derivate Triangle, Squaree Circledeve comprendere la calculateArea()funzione con attuazione.
Una funzione virtuale pura non ha il corpo della funzione e deve terminare con = 0. Per esempio,
 class Shape ( public: // creating a pure virtual function virtual void calculateArea() = 0; );
Nota: la = 0sintassi non significa che stiamo assegnando 0 alla funzione. È solo il modo in cui definiamo le funzioni virtuali pure.
Classe astratta
Una classe che contiene una funzione virtuale pura è nota come classe astratta. Nell'esempio precedente, la classe Shapeè una classe astratta.
Non possiamo creare oggetti di una classe astratta. Tuttavia, possiamo derivarne classi e utilizzare i loro membri dati e funzioni membro (eccetto le funzioni virtuali pure).
Esempio: classe astratta C ++ e funzione virtuale pura
 // 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; )
Produzione
Immettere la lunghezza per calcolare l'area di un quadrato: 4 Area del quadrato: 16 Immettere il raggio per calcolare l'area di un cerchio: 5 Area del cerchio: 78,5
In questo programma, virtual float calculateArea() = 0;all'interno della Shapeclasse c'è una pura funzione virtuale.
Ecco perché dobbiamo fornire l'implementazione di calculateArea()in entrambe le nostre classi derivate, altrimenti avremo un errore.








