本篇主要写C++如何处理用户自定义类型的转换。
1 转换构造函数
在C++中,接受一个参数的构造函数才能作为转换函数,可以通过添加默认参数的方式满足该条件。一旦成为转换函数,它将类型与参数类型相同的值转换为类,即 使用构造函数来创建对象完成初始化,如1)处。这个过程称为隐式转换,因为他是自动进行的,而不需要显式强制转换类型转换。但关键字explicit可以关闭这种自动特性。即便关闭这种特性,仍允许显式转换,即显式强制类型转换。
// 构造函数声明
Temperature(double a); // 可作转换函数
Temperature t1 = 31.5; // 自动转换 1)处
// 构造函数声明
explicit Temperature(double a, int b = 0); // 可做转换函数,但失去自动转换特性
Temperature t2 = (Temperature)30.5; // 显式强制转换形式一
Temperature t2 = Temperature(30.5); // 显式强制转换形式二
// 构造函数声明
Temperature(double a, int b); // 不可作转换函数
在以下这些情况可以发生隐式转换,前提是要有接受一个参数的构造函数才能完成转换:
-
将Temperature对象初始化为double值时
-
将double值赋给Temperature对象时</