Ich habe eine Basisklasse namens Panel, wo einige Informationen über ein Fenster gespeichert ist, dann habe ich Unterklassen für alle Steuerelemente: Button, Label usw. In der Basisklasse habe ich die virtual void ApplySchemeSettings(Scheme* scheme) { }
Methode , die innerhalb des Panel(Panel* parent)
Konstruktors aufgerufen wird. Aber statt der Unterklasse wird der ApplySchemeSettings
aus der Basisklasse (Panel
) aufgerufen.Virtuelle Methode nicht aufgerufen
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");
}
}
Ich kann nicht erklären ApplySchemeSettings
als abstraktes, weil die Unterklassen von Benutzern erstellt.
'this-> ApplySchemeSettings (scheme());' der Typ von 'this' Zeiger an der Stelle des Aufrufs ist' Panel * const', also es ruft 'Panel :: ApplySchemeSettings' auf. Die Moral der Geschichte ist nie Aufruf virtueller Funktion vom Konstruktor der Basisklasse. –
http://stackoverflow.com/questions/6582239/avoiding-virtual-methods-in-constructor –
http://stackoverflow.com/questions/507043/virtual-function-invocation-from-constructor –