从派生构造函数调用基类方法

从派生构造函数调用基类方法

问题描述:

class Base { 
    public: 
    Base() {} 

    void Foo(int x) {...} 
}; 

class Derived : public Base { 
    public: 
    Derived(int args) { 
     /* process args in some way */ 

     Foo(result); 
    } 
}; 

是否允许在派生类的构造函数中调用基类的方法? 我会想象这是好的基础对象应该完全构建,但我想检查以防万一。从派生构造函数调用基类方法

是否允许在派生类的构造函数中调用基类的方法?

是的。请注意0​​的功能。如果派生自Derived的类覆盖虚拟函数,而将Derived构造为该另一派生类的子对象,则动态类型总是Derived,因此不调用在其他派生类中覆盖的虚拟函数。 (对于析构函数,BTW也是如此。)

我想这是好的,因为基础对象应该完全构建,但我想检查以防万一。

您的推理是正确的。

有当危险:
1.该方法被重写
2.方法调用被覆盖

+2

这是完全错误的其他方法。重载的函数和构造函数肯定没有问题。你的意思是_overridden_​​? (如果是这样,不要忘记,这只适用于虚拟功能。) – sbi 2010-06-19 10:50:14

+0

upvoted(和sbi的答案也是),但你的意思是'重写',而不是'重载' – tpdi 2010-06-19 10:52:00

+0

sbi,在adf88的防守中,overridden意味着虚拟否则它是隐藏的,没有被覆盖,可能是一个错误)。 – tpdi 2010-06-19 10:54:03