面试题答案
一键面试#include <iostream>
class MyClass {
private:
const int constantValue;
int& referenceValue;
int normalValue;
public:
// 构造函数重载,带三个参数
MyClass(int constVal, int& refVal, int normVal) : constantValue(constVal), referenceValue(refVal), normalValue(normVal) {
// 构造函数体可以为空,初始化在初始化列表中完成
}
// 构造函数重载,带两个参数(假设使用一个默认值来初始化普通变量)
MyClass(int constVal, int& refVal) : constantValue(constVal), referenceValue(refVal), normalValue(0) {
// 构造函数体可以为空,初始化在初始化列表中完成
}
void printValues() const {
std::cout << "Constant Value: " << constantValue << std::endl;
std::cout << "Reference Value: " << referenceValue << std::endl;
std::cout << "Normal Value: " << normalValue << std::endl;
}
};
在C++中,常量成员变量一旦初始化后就不能再修改,引用成员变量在定义后必须马上初始化且不能重新绑定到其他对象。因此,必须使用初始化列表来初始化常量和引用成员变量。在构造函数体中,这些成员变量已经被隐式创建,再对它们赋值就相当于试图修改常量或重新绑定引用,这是不允许的。只有在初始化列表中,才能在对象创建时对这些特殊成员变量进行初始化。
示例使用:
int main() {
int num = 10;
MyClass obj1(5, num, 15);
obj1.printValues();
MyClass obj2(3, num);
obj2.printValues();
return 0;
}