dragneel ha scritto:
Riuscite a spiegarmi brevemente dove sbaglio?
Non puoi convertire le pere in mele, le pere non sono mele e non c' è conversione che tenga. (lo stesso vale per i pani e i pesci ma qui il discorso si fa complicato).
Scherzi a parte, supponiamo che la classe A contega i campi x e y e la classe b aggiunga il campo z. Quando istanzi un A crei una zona di memoria che contiene x e y, e quando istanzi un B crei una zona di memoria che contiene x, y, z.
Quando fai i cast non cambi la natura dell' oggetto che hai allocato ma solo il modo in qui lo vedi. Se hai un oggetto di tipo B lo puoi usare come un A, ti limiterai ad usare x e y, e z sarà inacessibile, ma se hai un A non puoi usarlo come un B in quanto gli manca il campo Z.
quindi:
- A* = new A() è un oggetto A non puo diventare un B.
- A* = new B() è un oggetto B, lo puoi usare come un A tramite un A*, e lo puoi usare come un B attraverso un cast da A* a B* (cambi il tipo del puntatore non ciò a cui punta).
Tornando alle pere, la Pera
è un Frutto, ma un Frutto
non è una Pera, il dynamic_cast esaminando gli oggetti puntati (e non il tipo del puntatore) ti dice se vale la relazione
è un.