Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Dynamic Casting che fallisce
Forum - C/C++ - Dynamic Casting che fallisce

Avatar
MagoAntò (Normal User)
Rookie


Messaggi: 42
Iscritto: 07/02/2009

Segnala al moderatore
Postato alle 19:05
Mercoledì, 02/05/2012
Ciao a tutti!

Sto cercando di sostituire il cast "C-Style" con quello dinamico del C++ ai fini di eseguire un controllo sul tipo di dato effettivamente castato.

Dopo aver attivato il RTTI, ho scritto un codice di questo tipo

Codice sorgente - presumibilmente C++

  1. class nodo_BST // Nodo di un albero binario
  2. {
  3. private:
  4.    ...
  5.    nodo_BST *padre;
  6.  
  7. public:
  8.    ...
  9.    nodo_BST* get_padre()
  10.    {
  11.       return padre;
  12.    }
  13.  
  14.    virtual void dummy () // dichiarato perchè il dynamic cast funziona solo con classi polimorfiche
  15.    {
  16.    }
  17. };
  18.  
  19. class nodo_RB : public nodo_BST
  20. {
  21. private:
  22.    colore c;
  23.    nodo_RB* temp;
  24.  
  25. public:
  26.    ...
  27.    nodo_RB* get_padre()
  28.    {
  29.       temp = dynamic_cast<nodo_RB*>(nodo_BST::get_padre());
  30.      
  31.       if (temp)
  32.       {
  33.          cout<<"Conversione riuscita!"<<endl;
  34.          return temp;
  35.       }
  36.       else
  37.          cout<<"Fallimento"<<endl;
  38.    }
  39. };



Purtroppo temp viene settato a NULL ed il programma non può continuare. Dove sbaglio? :(

Grazie in anticipo!

PM Quote
Avatar
arack95 (Member)
Pro


Messaggi: 144
Iscritto: 15/11/2010

Segnala al moderatore
Postato alle 15:23
Giovedì, 03/05/2012
Prima di tutto una precisazione:
Il dynamic_cast funziona esclusivamente con le classi polimorfe se e soltanto se stai facendo una conversione del tipo classe_base->classe_derivata, se fai classe_derivata->classe_base non è necessario.

Detto ciò, la conversione la puoi fare solo se classe_base punta ad una classe_derivata, quindi in nodo_BST padre deve puntare ad un nodo_RT, altrimenti il cast ritorna null.

Ti lascio un link dove trovi qualche esempio:
http://www.cplusplus.com/doc/tutorial/typecasting/


Take life less seriously!
PM Quote