1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| struct Parent {};
struct Enfant: Parent {};
[...]
// nos instances, que tu devra allouer dynamiquement si tu veux les mettre dans un container (dans un std::unique_ptr généralement)
Parent parent;
Enfant enfant;
// ici on simule ton problème, en perdant l'information sur le type
Parent* a = &parent;
Parent* b = &enfant;
// exemples de cast
Enfant* c = static_cast<Enfant*>(b); // ok, on sait que b est un enfant, on a le droit de le cast
Enfant* d = static_cast<Enfant*>(a); // ... pas bon, par contre aucun moyen de savoir si le retour est valide ou non au runtime, va causer des problèmes (undefined behaviours)
Enfant* e = dynamic_cast<Enfant*>(a); // mais avec le dynamic_cast tu auras moyen de savoir si le cast a écouché, ici e va valoir nullptr. |
Partager