面试题答案
一键面试关系描述
在这种情况下,首先会进行基类的初始化,然后再进行对象成员的初始化。这是因为基类是派生类的基础,必须先完成初始化以确保派生类有正确的基础状态,之后再初始化派生类自身的对象成员。
代码验证
#include <iostream>
// 基类
class Base {
public:
int baseValue;
Base(int value) : baseValue(value) {
std::cout << "Base class constructor, baseValue = " << baseValue << std::endl;
}
};
// 模板派生类,包含对象成员
template<typename T>
class Derived : public Base {
public:
T member;
Derived(int baseVal, const T& obj) : Base(baseVal), member(obj) {
std::cout << "Derived class constructor, member value = " << member << std::endl;
}
};
int main() {
Derived<int> d(10, 20);
return 0;
}
在上述代码中,Derived
类继承自 Base
类,并且包含一个模板类型的对象成员 member
。在 Derived
的构造函数中,先调用 Base
类的构造函数进行基类初始化,再初始化对象成员 member
。main
函数中创建 Derived<int>
对象时,可以观察到先输出基类构造函数的信息,再输出派生类构造函数中关于对象成员初始化的信息,从而验证了这种初始化顺序。