tengo el siguiente código:El uso de la función virtual en los niños después de la fundición operación en C++
class A
{
};
class B : public A
{
public:
virtual void f() {}
};
int main()
{
A* a = new A();
B* b = static_cast<B*>(a);
b->f();
}
Este programa falla con un error de segmentación. Hay dos soluciones para hacer de este programa de trabajo:
- declaran f no virtual
- no llame b-> f() (es decir, no falla debido al reparto)
Sin embargo , ambos no son una opción. Supongo que esto no funciona debido a una búsqueda en el vtable.
(En el programa real, una tenga también funciones virtuales. Además, la función virtual no se llama en el constructor.)
¿Hay una manera de hacer este programa?
+1 para una primera pregunta en el formato adecuado. –
En este caso, es posible que prefiera dynamic_cast, que "fallará" (return null) con A * a = new A(), pero tendrá éxito con A * a = new B(). Deberá probar que b no es nulo antes de llamar -> f(). – jmanning2k