我知道这个问题有明确的答案:首先调用基类构造函数,然后调用派生类构造函数。基类构造函数在派生类构造函数之前真的调用
但我不完全理解“被叫”这个词。这是否意味着构造函数的使用开始,还是构造函数的使用完成?换句话说,对于下面的代码两种可能的顺序:
BaseClass的构造开始 - > BaseClass的构造函数中完成 - > DerivedClass构造开始 - > DerivedClass构造完成。
DerivedClass构造函数启动 - > BaseClass构造函数启动 - > BaseClass构造函数完成 - > DerivedClass构造函数完成。
哪一个应该是正确的顺序?如果1是正确的,在我们初始化DerivedClass实例之前,编译器如何知道调用BaseClass构造函数?
看来情况2是正确的:“调用”应该意味着构造函数的完成。后续问题是如何解析器?我知道标准答案是“派生类的析构函数被称为第一个”。因此,这是正确的顺序为:
- DerivedClass析构函数开始
- DerivedClass析构函数完成
- BaseClass的析构函数开始
- BaseClass的析构函数完成
感谢
class BaseClass {
public:
BaseClass() {
cout << "BaseClass constructor." << endl;
}
};
class DerivedClass : public BaseClass {
public:
DerivedClass() : BaseClass() {
cout << "DerivedClass constructor." << endl;
}
};
int main() {
DerivedClass dc;
}
为什么不运行该程序并找出答案? – 2014-09-23 14:13:23
试试看,一个重要的座右铭;)。 – 2014-09-23 14:13:54
如果2是正确的,那么在派生类构造函数中的基准类构造函数是否会被“注入”?编译器如何做出该决定? – 2014-09-23 14:14:20