【发布时间】:2012-06-21 21:15:00
【问题描述】:
我有一个名为 Panel 的基类,其中存储了有关窗口的一些信息,然后,我有所有控件的子类:按钮、标签等。在基类中,我有 virtual void ApplySchemeSettings(Scheme* scheme) { } 方法,即在Panel(Panel* parent) 构造函数中调用。但不是子类,而是基类 (Panel) 中的 ApplySchemeSettings。
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");
}
}
我不能将ApplySchemeSettings 声明为抽象,因为子类是由用户创建的。
【问题讨论】:
-
this->ApplySchemeSettings(scheme());this在调用点的指针类型是Panel* const,所以它调用Panel::ApplySchemeSettings。故事的寓意是永远不要从基类的构造函数中调用虚函数。
标签: c++ class inheritance virtual