面试题答案
一键面试适用场景
- 初始化常量成员:常量成员一旦初始化后就不能再修改,必须在构造函数初始化列表中进行初始化。
- 初始化引用成员:引用在定义时必须初始化,所以只能在构造函数初始化列表中初始化。
- 调用基类构造函数:当派生类需要调用基类的特定构造函数时,通过初始化列表传递参数给基类构造函数。
- 调用成员对象的构造函数:如果类中有成员对象,且该成员对象的构造函数需要参数,可在初始化列表中进行初始化。
示例
#include <iostream>
class Base {
public:
Base(int value) : baseValue(value) {
std::cout << "Base constructor with value: " << baseValue << std::endl;
}
private:
int baseValue;
};
class Derived : public Base {
public:
// 初始化常量成员、引用成员、调用基类构造函数和成员对象构造函数
Derived(int baseVal, int refVal) : Base(baseVal), ref(refVal), constValue(10), memberObj(baseVal + refVal) {
std::cout << "Derived constructor" << std::endl;
}
private:
int& ref;
const int constValue;
Base memberObj;
};
int main() {
int temp = 5;
Derived d(3, temp);
return 0;
}
在上述代码中:
Derived
类通过初始化列表调用Base
类的构造函数来初始化基类部分。- 初始化了引用成员
ref
和常量成员constValue
。 - 初始化了成员对象
memberObj
。