我有一些代码(C ++ 11),如下所示:
Form.hpp:
class CForm{
public:
CForm(int paTemplate);
protected:
virtual void createFromTemplate(int paTemplate);
}
Dialog.hpp
class CDialog : public CForm {
public:
CDialog(int paTemplate);
private:
void createFromTemplate(int paTemplate);
};
Form.cpp
CForm::CForm(int paTemplate){
createFromTemplate(paTemplate);
}
Dialog.cpp
CDialog::CDialog(int paTemplate) : CForm(paTemplate){
active = false;
}
我希望我的对话框可以调用它自己的createFromTemplate
,这样就可以调用表单createFromTemplate
。我怎样才能实现它? (我在CDialog(template);
)中致电main
。
答案 0 :(得分:3)
这是不可能的 - 当你在构造函数/析构函数中调用虚函数时,来自"这个"的版本。等级或以下被称为。在你的情况下,无论你做什么,它总是会调用CForm :: createFromTemplate()。
点击此链接 - http://www.artima.com/cppsource/nevercall.html - 它是" Effective C ++"的一章。
答案 1 :(得分:0)
这里的问题是CDialog
尚未创建(记住类构造顺序:从上到下),因此函数createFromTemplate
没有覆盖。
如果您需要该函数是虚拟的,那么我想最好的选择是在CForm
中添加一个新的受保护方法(让我们称之为initializeComponent
),这应该从{的构造函数中调用{1}}
CDialog
我的2美分