6
class Base {
    public:
    Base() {}

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

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

        Foo(result);
    }
};

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

4

2 回答 2

12

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

是的。只需注意virtual功能。如果一个派生的类Derived重写了一个虚函数,在构造Derived为该进一步派生类的子对象时,动态类型始终为Derived,因此不会调用在进一步派生类中重写的虚函数。(顺便说一句,析构函数也是如此。)

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

你的推理是对的。

于 2010-06-19T10:47:02.087 回答
2

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

于 2010-06-19T10:47:32.230 回答