面试题答案
一键面试- 构造函数调用顺序:
- 当创建一个
B
类对象时,首先调用基类A
的构造函数,然后再调用派生类B
的构造函数。这是因为在创建派生类对象时,派生类对象包含基类对象的子对象,需要先初始化基类部分,再初始化派生类新增的部分。
- 当创建一个
- 对初始化对象成员的影响:
- 这种调用顺序确保了对象成员按照正确的层次结构进行初始化。基类的成员在派生类成员之前被初始化,使得派生类可以依赖基类已经初始化好的状态。例如,如果派生类的某个操作依赖基类的某个已初始化成员变量,那么这种顺序保证了在派生类构造函数执行时,基类成员已经准备好。
- 验证代码:
#include <iostream>
class A {
public:
A() {
std::cout << "A's constructor called." << std::endl;
}
};
class B : public A {
public:
B() {
std::cout << "B's constructor called." << std::endl;
}
};
int main() {
B b;
return 0;
}
在上述代码中,当main
函数创建B
类对象b
时,会先输出A's constructor called.
,然后输出B's constructor called.
,验证了构造函数的调用顺序。