Vidéo: Programmer en Swift #14 - La POO (5) - Héritage et Polymorphisme 2024
En tant que straddler de clôture, C ++ supporte à la fois la liaison précoce et tardive. N'importe quel langage de programmation peut prendre en charge une liaison précoce ou tardive basée sur les caprices de ses développeurs. Les langues plus anciennes comme C ont tendance à prendre en charge la liaison précoce seule. Les langages récents comme Java et C # ne prennent en charge que la liaison tardive.
Vous pourriez être surpris que la valeur par défaut pour C ++ soit une liaison anticipée. La sortie du programme OverloadOverride telle qu'elle apparaît est la suivante:
Nous sommes en Student:: calcTuition Nous sommes en Student:: calcTuition Appuyez sur Entrée pour continuer …
La raison est simple, si un peu datée. Tout d'abord, C ++ doit agir autant que C par défaut pour conserver la compatibilité ascendante avec son prédécesseur. Deuxièmement, le polymorphisme ajoute une petite quantité de surcharge à chaque appel de fonction à la fois en termes de stockage de données et de code nécessaire pour effectuer l'appel.
Les fondateurs de C ++ craignaient que tout surcoût supplémentaire soit utilisé comme raison pour ne pas adopter C ++ comme langage de choix du système, ils ont donc fait le lien par défaut le plus efficace.
Pour rendre une fonction membre polymorphe, le programmeur doit marquer la fonction avec le mot-clé C ++ virtuel, comme indiqué dans la modification suivante de la déclaration dans OverloadOveride < programme: class Étudiant {public: virtual void calcTuition () {cout << "nous sommes dans Student:: calcTuition" << endl;}};
Le mot clé
virtual indique à C ++ que calcTuition () est une fonction membre polymorphe. C'est-à-dire que déclarer calcTuition () signifie que les appels seront liés tardivement s'il y a un doute sur le type d'exécution de l'objet avec lequel calcTuition () est appelé.
OverloadOveride avec calcTuition () déclaré virtual génère la sortie suivante: Nous sommes dans Student:: calcTuition Nous sommes dans GraduateStudent:: calcTuition Press Entrez pour continuer …
Si vous êtes à l'aise avec le débogueur fourni avec votre environnement C ++, vous devriez vraiment passer en revue cet exemple. C'est tellement cool de voir le programme en une seule étape dans Student:: calcTuition () la première fois que fn () est appelée mais en GraduateStudent:: calcTuition () sur le second appel. Vous ne pouvez pas vraiment apprécier le polymorphisme avant de l'avoir essayé.