C++是否要求您从派生类初始化基类成员?

Wor*_*rod 3 c++ inheritance

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();
}
Run Code Online (Sandbox Code Playgroud)

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

And*_*sen 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) {}
};
Run Code Online (Sandbox Code Playgroud)