3
class Base {
public:
    int a;
    Base():a(0) {}
    virtual ~Base();
}
class Derived : public Base {
public:
    int b;
    Derived():b(0) {
        Base* pBase = static_cast<Base*>(this);
        pBase->Base();
    }
    ~Derived();
}

对基类构造函数的调用是必要的还是 c++ 会自动执行此操作?例如,C++ 是否要求您从任何派生类初始化基类成员?

4

2 回答 2

9

在调用派生类的构造函数之前,将自动调用基类的构造函数。

您可以使用初始化列表显式指定要调用的基本构造函数(如果有多个):

class Base {
  public:
    int a;
    Base():a(0) {}
    Base(int a):a(a) {}
};
class Derived {
  public:
    int b;
    Derived():Base(),b(0) {}
    Derived(int a):Base(a),b(0) {}
};
于 2012-08-29T00:06:45.747 回答
1

基类构造函数被自动调用(在派生类构造函数之前)。因此,您不需要也绝对不能尝试手动调用基本构造函数。

于 2012-08-29T00:05:33.733 回答