Conversão de ponteiro para ponteiro entre classes derivada e base?
Em relação ao seguinte programa C ++:
class Base { };
class Child : public Base { };
int main()
{
// Normal: using child as base is allowed
Child *c = new Child();
Base *b = c;
// Double pointers: apparently can't use Child** as Base**
Child **cc = &c;
Base **bb = cc;
return 0;
}
O GCC produz o seguinte erro na última declaração de atribuição:
error: invalid conversion from ‘Child**’ to ‘Base**’
Minha pergunta está dividida em duas partes:
Por que não há conversão implícita de Child ** para Base **?Eu posso fazer esse exemplo funcionar com um elenco de estilo C ou umreinterpret_cast
. Usar esses modelos significa jogar fora todo o tipo de segurança. Existe algo que eu possa adicionar às definições de classe para fazer com que esses ponteiros sejam convertidos implicitamente ou pelo menos sintonize a conversão de uma maneira que me permita usarstatic_cast
em vez de?