Pregunta

En cuanto al siguiente 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;
}

GCC produce el siguiente error en la última instrucción de asignación:

error: invalid conversion from ‘Child**’ to ‘Base**’

Mi pregunta es en dos partes:

  1. Por qué no hay conversión implícita de Niño ** a ** Base?
  2. I puede que este ejemplo funcione con una conversión de estilo C o un reinterpret_cast. El uso de estos medios yesos tirar toda la seguridad de tipos. ¿Hay algo que puedo añadir a las definiciones de clase para hacer estos punteros convierte implícitamente, o al menos la frase la conversión de una forma que me permite usar static_cast en su lugar?
¿Fue útil?

Solución

Si esto era permitido, se podría escribir esto:

*bb = new Base;

Y c terminaría apunta a una instancia de Base. Mala.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top