Polymorphisme sans pointeurs et références: un polymorphisme mythe
est un aspect fondamental de la programmation orientée objet, permettant au code de se comporter différemment pour des objets de sous-classes. Cependant, de nombreux développeurs réfléchissent à la raison pour laquelle le polymorphisme semble nécessiter l'utilisation de pointeurs ou de références.
Le rôle trompeur de l'allocation de mémoire
"Si vous allouez de la mémoire sur le tas, vous avez une liaison dynamique," on pourrait penser. Bien que vrai, la simple allocation de mémoire ne suffit pas pour le polymorphisme. Prenez l'exemple:
Derived d; Base* b = &d;
ici, D réside sur la pile, mais le polymorphisme fonctionne parfaitement sur b. Cela met en évidence que l'emplacement de la mémoire n'est pas pertinent pour le polymorphisme.
Semantics: La clé du polymorphisme
Le facteur crucial réside dans la sémantique. Lorsque vous créez un pointeur de classe de base ou une référence à une instance de classe dérivée, vous conservez efficacement l'accès aux méthodes de la classe dérivée. Considérons:
Base c = Derived();
Bien que C soit une instance de base, il ne peut pas présenter de comportement polymorphe car il stocke une version tranchée de l'objet dérivé, perdant son identité de classe dérivée. Indirection, les pointeurs offrent une flexibilité supplémentaire. Ils vous permettent de pointer des objets de tout type, y compris les classes de base et dérivées. En revanche, les références ne peuvent se lier qu'aux objets d'un type spécifique, limitant leurs capacités polymorphes.
Conclusion
Polymorphisme sans pointeurs ou références est une mauvaise conception. L'utilisation de pointeurs et de références garantit que le compilateur maintient les informations de type nécessaire, permettant une résolution dynamique des appels de méthode et un vrai comportement polymorphe dans votre code.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3