Dans ce didacticiel, nous en apprendrons davantage sur les fonctions virtuelles abstraites et les classes abstraites à l'aide d'exemples.
Avant d'en apprendre davantage sur les fonctions virtuelles pures, assurez-vous de consulter ces didacticiels:
- Héritage C ++
- Fonctions virtuelles C ++
Fonctions virtuelles pures C ++
Des fonctions virtuelles pures sont utilisées
- si une fonction n'a aucune utilité dans la classe de base
- mais la fonction doit être implémentée par toutes ses classes dérivées
Prenons un exemple,
Supposons, nous avons dérivé Triangle
, Square
et les Circle
classes de la Shape
classe, et nous voulons calculer la surface de toutes ces formes.
Dans ce cas, nous pouvons créer une fonction virtuelle pure nommée calculateArea()
dans le Shape
. Comme il est une fonction virtuelle pure, toutes les classes dérivées Triangle
, Square
et Circle
doit inclure la calculateArea()
fonction mise en œuvre.
Une fonction virtuelle pure n'a pas le corps de la fonction et doit se terminer par = 0
. Par exemple,
class Shape ( public: // creating a pure virtual function virtual void calculateArea() = 0; );
Remarque: la = 0
syntaxe ne signifie pas que nous attribuons 0 à la fonction. C'est juste la façon dont nous définissons les fonctions virtuelles pures.
Classe abstraite
Une classe qui contient une fonction virtuelle pure est appelée classe abstraite. Dans l'exemple ci-dessus, la classe Shape
est une classe abstraite.
Nous ne pouvons pas créer d'objets d'une classe abstraite. Cependant, nous pouvons en dériver des classes et utiliser leurs membres de données et leurs fonctions membres (à l'exception des fonctions virtuelles pures).
Exemple: classe abstraite C ++ et fonction virtuelle pure
// 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; )
Production
Entrez la longueur pour calculer l'aire d'un carré: 4 Aire du carré: 16 Entrez le rayon pour calculer l'aire d'un cercle: 5 Aire du cercle: 78,5
Dans ce programme, virtual float calculateArea() = 0;
à l'intérieur de la Shape
classe se trouve une fonction virtuelle pure.
C'est pourquoi nous devons fournir l'implémentation de calculateArea()
dans nos deux classes dérivées, sinon nous obtiendrons une erreur.