我有一些这样的代码(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);
};


表格

CForm::CForm(int paTemplate){
    createFromTemplate(paTemplate);
}


对话框.cpp

CDialog::CDialog(int paTemplate) : CForm(paTemplate){
    active = false;
}


我希望我的对话框调用它自己的createFromTemplate,以这种方式调用表单的createFromTemplate。我该如何实现? (我在CDialog(template);中称为main)。

最佳答案

这是不可能的-在构造函数/析构函数中调用虚拟函数时,将调用“ this”类或更低版本中的版本。在您的情况下,无论您做什么,它都将始终调用CForm :: createFromTemplate()。

检查此链接-http://www.artima.com/cppsource/nevercall.html-这是“有效C ++”的一章。

关于c++ - 在C++中的父级构造函数中调用重写的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26125980/

10-09 02:11