Conversão
A linguagem C++ estabelece que se uma classe é derivada de uma classe base que contém funções virtuais, um ponteiro para esse tipo de classe base pode ser usado para chamar as implementações das funções virtuais que residem no objeto de classe derivada. Uma classe que contém funções virtuais é às vezes chamada de "classe polimórfica".
Como uma classe derivada contém completamente as definições de todas as classes base de que é derivada, é seguro converter um ponteiro superior da hierarquia de classes em qualquer uma dessas classes base. Dado um ponteiro para uma classe base, talvez seja seguro converter o ponteiro abaixo na hierarquia. É seguro se o objeto que está sendo apontado seja realmente de um tipo derivado da classe base. Nesse caso, o objeto real é considerado o "objeto completo". O ponteiro para classe base é considerado um "subobjeto" do objeto completo. Por exemplo, considere a hierarquia da classe mostrada na figura a seguir.
Hierarquia de classes
Um objeto do tipo C pode ser visualizado conforme mostrado na figura a seguir.
Classe C com subobjeto B e subobjeto A
Dada uma instância da classe C, há um subobjeto B e um subobjeto A. A instância de C, inclusive os subobjetos A e B, é o “objeto completo”.
Usando as informações de tipo de tempo de execução, é possível verificar se um ponteiro aponta realmente para um objeto completo e pode ser convertido seguramente para apontar para outro objeto em sua hierarquia. O operador dynamic_cast pode ser usado para fazer esses tipos de conversões. Também executa a verificação de tempo de execução necessária para tornar a operação segura.
Para conversão de tipos não polimórficos, você pode usar o operador static_cast (este tópico explica a diferença entre conversões estáticas e dinâmicas, e quando é apropriado usar cada uma).
Esta seção abrange os seguintes tópicos: