- 定义转换构造函数的目的是实现类型的自动转换。
- 只有一个参数,而且不是复制构造函数的构造函数,一般 就可以看作是转换构造函数。
- 当需要的时候,编译系统会自动调用转换构造函数,建立 一个无名的临时对象(或临时变量)。
#include<iostream>
using namespace std;
class complex {
public:
double real, imag;
complex(int i) {
cout << "类型转换构造函数被调用" << endl;
real = i, imag = 0;
}
complex(double a, double b) {
real = a, imag = b;
cout << "复制构造函数被调用" << endl;
}
};
int main()
{
complex c1(2, 3);
complex c2 = 5;//5被自动转换成一个临时Complex对象
cout << c2.real << " " << c2.imag << endl;
return 0;
}
执行效果
测试发现
- 经过测试发现,以下写法也会当作类型转换函构造函数
complex c2 =(5,2);
complex c2 =(5);
2. C++中的explicit关键字只需用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式)。
执行效果
当尝试两个参数时
执行效果
注:当类构造函数只有一个参数或除了第一个参数外其余参数都有默认值时,则此类有隐含的类型转换操作符(隐式转换),但有时隐式转换并不是我们想要的,可在构造函数前加上关键字explicit,来指定显式调用。