La conversión del puntero a puntero entre las clases derivadas y de la base?
-
22-09-2019 - |
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:
- Por qué no hay conversión implícita de Niño ** a ** Base?
- 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 usarstatic_cast
en su lugar?
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