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
, Square
e Circle
le classi dalla Shape
classe, 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
, Square
e Circle
deve 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 = 0
sintassi 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 Shape
classe c'è una pura funzione virtuale.
Ecco perché dobbiamo fornire l'implementazione di calculateArea()
in entrambe le nostre classi derivate, altrimenti avremo un errore.