Comment fonctionne le polymorphisme en C ++

En straddler de clôture, C ++ supporte à la fois précoce et tardive de liaison. Tout langage de programmation donné peut soutenir soit tôt ou tard liaison basée sur les caprices de ses développeurs. Langues anciennes comme C ont tendance à soutenir liaison anticipée seul. Langues récentes, comme Java et C # ne supportent que la liaison tardive.

Vous pourriez être surpris que le défaut de C ++ est une liaison anticipée. La sortie de la OverloadOverride programmer la façon dont elle apparaît est la suivante:

Nous sommes en étudiant :: calcTuitionWe're en étudiant :: calcTuitionPress Entrée pour continuer ...

La raison est simple, si un peu daté. Premièrement, C ++ doit agir autant que possible comme C par défaut pour conserver la compatibilité ascendante avec son prédécesseur. Deuxièmement, le polymorphisme ajoute une petite quantité de frais généraux pour chaque appel de fonction à la fois en termes de stockage de données et le code nécessaire pour effectuer l'appel.




Les fondateurs de C ++ craignaient que toute charge supplémentaire serait utilisé comme une raison de ne pas adopter C ++ comme la langue de choix du système, alors ils ont fait la plus efficace liaison anticipée par défaut.

Pour faire une fonction membre polymorphe, le programmeur doit drapeau de la fonction avec le mot-clé de la C virtuel, comme indiqué dans la modification suivante à la déclaration dans le OverloadOveride programme:

Étudiant de classe {public: void calcTuition virtuel () {cout lt; lt; "Nous sommes en étudiant :: calcTuition" lt; lt; endl -}} -

Le mot-clé virtuel qui raconte que C ++ calcTuition () est une fonction membre polymorphe. Cela revient à dire, en déclarant calcTuition () des moyens virtuels ce que les appels seront liés en retard si il n'y a aucun doute sur le type d'exécution de l'objet avec lequel calcTuition () est appelé.

L'exécution de la OverloadOveride programme avec calcTuition () virtuelle déclaré génère la sortie suivante:

Nous sommes en étudiant :: calcTuitionWe're dans GraduateStudent :: calcTuitionPress Entrée pour continuer ...

Si vous êtes à l'aise avec le débogueur qui vient avec votre environnement C ++ de, vous devriez vraiment seule étape à travers cet exemple. Il est tellement cool de voir le programme en une seule étape Étudiant :: calcTuition () la première fois que fn () est appelé, mais en GraduateStudent :: calcTuition () sur le deuxième appel. Vous ne pouvez pas vraiment apprécier le polymorphisme jusqu'à ce que vous avez essayé.

Vous devez déclarer la fonction virtuelle que dans la classe de base. La “ virtualité ” vers le bas est réalisée à la sous-classe automatiquement. Parfois, cependant, les programmeurs suivent la norme de déclarer la fonction virtuelle partout (virtuellement) de codage.


» » » » Comment fonctionne le polymorphisme en C ++