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 ++是否要求您从任何派生类初始化基类成员?
答案 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)
自动调用基类构造函数(在派生类构造函数之前)。您是否需要尝试手动调用基础构造函数,而不是必须这样做。