Classe abstraite C ++ et fonction virtuelle pure

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, Squareet les Circleclasses de la Shapeclasse, 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, Squareet Circledoit 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 = 0syntaxe 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 Shapeest 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 Shapeclasse 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.

Articles intéressants...