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

时间:2010-06-19 10:45:00

标签: c++ constructor methods base

class Base {
    public:
    Base() {}

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

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

        Foo(result);
    }
};

是否允许在派生类的构造函数中调用基类的方法? 我认为这很好,因为Base对象应该完全构造,但我想检查一下以防万一。

2 个答案:

答案 0 :(得分:11)

  

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

是。请注意virtual个功能。如果从Derived派生的类覆盖虚函数,则在构造Derived作为该进一步派生类的子对象时,动态类型始终为Derived,因此不会覆盖任何虚函数进一步派生类被调用。 (同样适用于析构函数,BTW。)

  

我认为这很好,因为Base对象应该完全构造,但我想检查以防万一。

你的推理是正确的。

答案 1 :(得分:1)

以下情况存在危险:
 1.方法被覆盖
 2.该方法调用其他被覆盖的方法