Tengo una clase base llamada Panel, donde se almacena cierta información sobre una ventana, luego, tengo subclases para todos los controles: Botón, Etiqueta, etc. En la clase base, tengo el método virtual void ApplySchemeSettings(Scheme* scheme) { }
, que se llama dentro del constructor Panel(Panel* parent)
. Pero en lugar de la subclase, se llama al ApplySchemeSettings
de la clase base (Panel
).Método virtual que no se llama
class Panel
{
[...]
public:
virtual void ApplySchemeSettings(Scheme* scheme) { };
Panel(Panel* parent)
{
[...]
this->ApplySchemeSettings(scheme());
};
}
class Frame : public Panel
{
[...]
public:
void ApplySchemeSettings(Scheme* scheme)
{
this->border = scheme->GetBorder("FrameBorder");
}
}
no puedo declarar como ApplySchemeSettings
abstracta porque las subclases se hace por el usuario.
'this-> ApplySchemeSettings (scheme());' el tipo de puntero 'this' en el punto de llamada es' Panel * const', por lo que invoca 'Panel :: ApplySchemeSettings'. La moraleja de la historia nunca se llama función virtual desde el constructor de la clase base. –
http://stackoverflow.com/questions/6582239/avoiding-virtual-methods-in-constructor –
http://stackoverflow.com/questions/507043/virtual-function-invocation-from-constructor –