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

时间:2012-08-29 00:02:20

标签: 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();
}

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

2 个答案:

答案 0 :(得分: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) {}
};

答案 1 :(得分:1)

自动调用基类构造函数(在派生类构造函数之前)。您是否需要尝试手动调用基础构造函数,而不是必须这样做。