Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente |
lang:cpp:heritage [2017/05/31 13:06] – Création avec "Cast sur une classe avec héritage" root | lang:cpp:heritage [2020/03/10 23:07] (Version actuelle) – supprimée root |
---|
=====reinterpret_cast sur une classe avec héritage===== | |
Un ''static_cast'' ou un ''dynamic_cast'' ne pose pas de problème dans le cas d'héritage multiple. | |
| |
Par contre, un ''reinterpret_cast'' d'un ''void *'' doit toujours se faire sur la classe la plus basse (la plus enfant). Un ''void *'' ne possède aucune information du type de la classe et donc le compilateur ne sait pas comment s'en sortir. Par exemple avec les méthodes virtuelles, il ne peut pas savoir à quelle classe appartient la première méthode en tête de la ''vtable''. Il y a les mêmes problèmes avec les attributs de la classe. | |
| |
[[https://stackoverflow.com/questions/2379427/multiple-inheritance-unexpected-result-after-cast-from-void-to-2nd-base-class|Source]], {{ :lang:cpp:heritage:c_-_multiple_inheritance_unexpected_result_after_cast_from_void_to_2nd_base_class_-_stack_overflow.maff |Archive}} | |