Dynamic cast
Sign in to saveC++ type conversion operator that uses run-time type information
Wikidata facts
- Instance of
- program operator
- Part of
- run-time type information
- Has use
- type conversion
Show 1 more fact
Sources (1)
via Wikidata · CC0
Article · Italiano
Il linguaggio di programmazione C++, oltre al cast esplicito stile C, dispone di altri quattro tipi di cast espliciti: const cast, dynamic_cast, e . Il costrutto dynamic_cast permette di convertire un puntatore ad un oggetto di una classe base ad uno di classe derivata, ma solo se la classe base è polimorfa (ovvero possiede almeno un metodo virtuale, distruttore virtuale incluso). La validità dell'operazione viene verificata in run-time. Qualora l'operazione non sia valida il costrutto restituisce un puntatore nullo. Esempio: class Padre {.....};class Figlio : public Padre {.....};class Nipote : public Figlio {.....};main { Padre *p, *pObj = new Padre; Figlio *f, *fObj = new Figlio; Nipote *n, *nObj = new Nipote; p = nObj; // ok un puntatore ad una classe derivata può essere assegnato ad uno di classe base n = p; // qui il compilatore genera errore perché non sa se l'assegnamento è valido (lo si sa solo run-time) n = dynamic_cast<Nipote*>(p); // qui si chiede di fare il controllo run-time per validare la conversione (valida in questo caso) if (n) cout << "conversione eseguita con successo"; p = fObj; n = dynamic_cast<Nipote*>(p); // qui si chiede di fare il controllo run-time per validare la conversione (non valida in questo caso) if (!n) cout << "conversione fallita";} Si tenga presente che affinché il costrutto dynamic_cast lavori correttamente è necessario che il supporto RTTI del compilatore sia attivo (spesso, nella produzione del firmware, si sceglie di non attivare RTTI poiché questa funzionalità assorbe una quantità di risorse non trascurabile).
Abstract from DBpedia / Wikipedia · CC BY-SA