Cast

Nel linguaggio C++ se una classe è derivata da una classe base che contiene funzioni virtuali, un puntatore a quel tipo della classe base può essere utilizzato per chiamare le implementazioni delle funzioni virtuali che si trovano nell'oggetto classe derivata. La classe che contiene le funzioni virtuali è talvolta detta "classe polimorfica".

Poiché una classe derivata completamente contiene le definizioni di tutte le classi di base da cui deriva, è possibile eseguire il cast di un puntatore alla gerarchia di classi a una di queste classi base. Dato un puntatore a una classe base, è possibile eseguire la riduzione del puntatore nella gerarchia. Questo è possibile se l'oggetto a cui si sta puntando è effettivamente di un tipo derivato dalla classe base. In questo caso, l'oggetto effettivo è detto "oggetto completo". Il puntatore alla classe base viene detto che punta a un "oggetto secondario" dell'oggetto completo. Si consideri ad esempio la gerarchia di classe illustrata nella figura che segue.

Diagram of a class hierarchy where C derives from B, which derives from A.
Gerarchia delle classi

Un oggetto di tipo C potrebbe essere visualizzato come illustrato di seguito.

Diagram of Class C with subobjects B and A.
Classe C con sottoggetti B e A

Data un'istanza della classe C, esiste un oggetto secondario B e un oggetto secondario A. L'istanza di C, inclusi gli oggetti secondari A e B, è "l'oggetto completo".

Utilizzando le informazioni del tipo di runtime, è possibile verificare se un puntatore punti effettivamente a un oggetto completo e possa essere eseguito il cast in modo sicuro a un altro oggetto nella relativa gerarchia. L'operatore dynamic_cast può essere usato per eseguire questi tipi di cast. Esegue inoltre la verifica del runtime necessaria per rendere l'operazione sicura.

Per la conversione di tipi nonpomorfici, è possibile usare l'operatore static_cast (in questo argomento viene illustrata la differenza tra conversioni di cast statico e dinamico e quando è appropriato usarle).

Questa sezione contiene gli argomenti seguenti:

Vedi anche

Espressioni