面试题答案
一键面试构造函数重载的必要条件
- 函数名相同:所有重载的构造函数都必须与类名相同,这是构造函数的基本特性。
- 参数列表不同:参数的个数、类型或顺序至少有一项不同。返回类型(构造函数无返回类型)和函数修饰符(如
const
等)不能作为区分重载构造函数的依据。
代码示例
#include <iostream>
class MyClass {
public:
// 第一个重载的构造函数,无参数
MyClass() {
std::cout << "无参数构造函数被调用" << std::endl;
}
// 第二个重载的构造函数,有一个int类型参数
MyClass(int num) {
std::cout << "带一个int参数的构造函数被调用,参数值为:" << num << std::endl;
}
// 第三个重载的构造函数,有一个double类型参数
MyClass(double num) {
std::cout << "带一个double参数的构造函数被调用,参数值为:" << num << std::endl;
}
// 第四个重载的构造函数,有一个int和一个double类型参数
MyClass(int num1, double num2) {
std::cout << "带一个int和一个double参数的构造函数被调用,int参数值为:" << num1 << ",double参数值为:" << num2 << std::endl;
}
};
int main() {
MyClass obj1; // 调用无参数构造函数
MyClass obj2(10); // 调用带一个int参数的构造函数
MyClass obj3(3.14); // 调用带一个double参数的构造函数
MyClass obj4(5, 2.5); // 调用带一个int和一个double参数的构造函数
return 0;
}
调用合适构造函数的方式
在创建对象时,编译器会根据提供的参数列表来选择合适的构造函数。如果提供的参数数量、类型和顺序与某个构造函数的参数列表完全匹配,就会调用该构造函数。例如:
MyClass obj1;
,没有提供参数,因此调用无参数的构造函数MyClass()
。MyClass obj2(10);
,提供了一个int
类型参数,所以调用MyClass(int num)
构造函数。MyClass obj3(3.14);
,提供了一个double
类型参数,调用MyClass(double num)
构造函数。MyClass obj4(5, 2.5);
,提供了一个int
和一个double
类型参数,调用MyClass(int num1, double num2)
构造函数。