Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Méthode Virtuelle Pure | Aperçu du Polymorphisme
C++ Oop
course content

Contenu du cours

C++ Oop

C++ Oop

1. Fondamentaux de la POO en C++
2. Constructeurs et Destructeurs
3. Aperçu de l'Encapsulation
4. Aperçu de l'Héritage
5. Aperçu du Polymorphisme

book
Méthode Virtuelle Pure

Le concept de méthode virtuelle est un pilier pour atteindre le polymorphisme, un principe fondamental dans la conception de systèmes logiciels flexibles et extensibles. Les méthodes virtuelles pures représentent une extension puissante de ce concept, fournissant un mécanisme pour définir des interfaces et permettant le lien dynamique.

Syntaxe de la méthode virtuelle pure

Une méthode virtuelle pure est déclarée avec le mot-clé virtual et initialisée à zéro. Cela indique que la fonction n'a pas de définition au sein de la classe et doit être surchargée par toute sous-classe avant que des objets de cette classe puissent être instanciés.

Remarque

Cette méthode fonctionne de manière similaire à une méthode standard, sauf qu'elle n'a pas de corps entouré de { } et est plutôt terminée par = 0;, indiquant aucune implémentation. Néanmoins, les autres règles pour cette méthode sont les mêmes que pour les autres.

Déclarer une méthode virtuelle pure rend la classe où elle est déclarée abstraite. Cela signifie qu'il devient impossible d'instancier des objets de celle-ci. Cette restriction survient parce que chaque méthode au sein de la classe doit être implémentée avant de créer et d'utiliser une instance afin de prévenir les erreurs et les comportements imprévisibles. Regardez le code ci-dessous :

h

Animal

copy
1234
class Animal { public: virtual void speak() = 0; };

La classe Animal comporte une méthode virtuelle pure nommée speak() empêchant l'instanciation d'objets à partir de cette classe. Ce choix de conception est logique, étant donné que le but de la méthode virtuelle est de représenter les sons distinctifs que chaque animal émet.

En rendant la méthode virtuelle, cela permet à chaque sous-classe d'implémenter sa propre version unique, capturant l'individualité du bruit de chaque animal. La décision de rendre la méthode pure virtuelle indique qu'aucune implémentation par défaut n'existe, soulignant la nécessité d'implémentations concrètes dans les classes dérivées.

cpp

main

copy
1234567
#include "Animal.h" int main() { // cannot declare variable 'animal' to be of abstract type Animal animal; }

Cela a également du sens. Créer des instances de la classe Animal serait impraticable et contre-intuitif, car elle représente un concept abstrait qui sert de catégorie pour divers animaux. Il n'y a pas de comportement spécifique associé à un animal générique, renforçant la nature abstraite de la classe et soulignant l'importance de créer des sous-classes spécialisées pour capturer les nuances du son de chaque animal spécifique.

cpp

main

copy
12345678910111213141516171819202122232425262728293031
#include <iostream> class Animal { public: // Pure virtual function to enforce implementation in derived classes virtual void speak() = 0; }; class Cat : public Animal { public: void speak() override { std::cout << "Meow!" << std::endl; } }; class Dog : public Animal { public: void speak() override { std::cout << "Bark!" << std::endl; } }; class Cow : public Animal { public: void speak() override { std::cout << "Moo!" << std::endl; } }; void pet(Animal& animal) { animal.speak(); } int main() { // Replace `Cat` with `Dog` or `Cow` to see their specific behavior Cat cat; pet(cat); }

Bien qu'il ne soit pas possible de créer un objet de type Animal directement, nous pouvons toujours l'utiliser comme paramètre dans une fonction. Similaire à l'exemple avec les boutons mentionné précédemment, nous exploitons le polymorphisme pour créer un programme polyvalent qui peut modifier dynamiquement son comportement pendant l'exécution.

Remarque

Essayez de passer un objet d'une autre classe à la fonction et vérifiez le résultat. De plus, essayez de créer un objet de classe abstraite et observez les résultats.

Que se passe-t-il lorsqu'une classe contient une méthode virtuelle pure ?

Que se passe-t-il lorsqu'une classe contient une méthode virtuelle pure ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 5. Chapitre 3
We're sorry to hear that something went wrong. What happened?
some-alt