Elenco
A linguagem C++ fornece 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 completamente contém as definições de todas as classes base do qual ele é derivado, é seguro converter um ponteiro para cima na hierarquia de classe para qualquer uma dessas classes base.Dado um ponteiro para uma classe base, talvez seja seguro para converter o ponteiro para baixo na hierarquia.É seguro se o objeto que está sendo apontado na verdade, é de um tipo derivado da classe base.Nesse caso, o objeto real é considerado o "objeto completo". O ponteiro para a classe base é considerado aponte para "subobjeto" do objeto completo.Por exemplo, considere a hierarquia de classe mostrada na figura a seguir.
Hierarquia de classes
Um objeto do tipo C pode ser visualizado como mostrado na figura a seguir.
Classe C com subobjeto B e subobjeto A
Dada uma instância da classe C, há um B subobjeto e um A objetos filho específicos.A instância do C, incluindo o A e B subobjects, é o "objeto completo".
Usando as informações de tipo de tempo de execução, é possível verificar se realmente aponta um ponteiro para um objeto completo e pode ser convertida com segurança para apontar para outro objeto em sua hierarquia.O dynamic_cast pode ser usado para fazer estes tipos de conversões.Ele também executa a verificação de tempo de execução necessária para que a operação segura.
Para conversão de tipos de nonpolymorphic, você pode usar o static_cast (Este tópico explica a diferença entre as conversões de elenco estático e dinâmico, e quando é apropriado usar cada um) do operador.
Esta seção aborda os seguintes tópicos: