不同数据类型之间的转换
1.标准类型间的转换
1.隐式转换(编译器自动完成)
2.显示转换(程序人员在程序中指定将一种指定的数据类型转换成另一指定的类型)
语法: 类型名(数据);
2.自定义转换
自定义类型之间如何转换 问题引出?
以前我们接触的是标准类型之间的转换,现在用户自己定义了类,就提出一个问题: 一个自定义类的对象能否转换成标准类型? 一个类的对象能否转换成另外一个类的对象?
解决办法:
需要定义专门的函数来处理,告诉编译系统怎末进行这些转换。
3.用转换构造函数进行不同数据类型的转换(将其他类型-->类的对象)
1.转换构造函数(conversion constructor function)的作用是:
将一个其他类型的数据转换成一个类的对象。相当于构造函数的重载函数。
2.转换构造函数的语法
类名(待转换的数据类型 变量名); // 其作用是将 待转换数据类型的数据 转换成 类的对象 eg: Complex(double r); 这个函数的作用是将double类型的数据转换为Complex类型,就是构造函数
3.注意:
转换构造函数只能有一个参数。如果有多个参数,就不是转换构造函数,无法区分要把哪个类型转换为类的对象。
4.类型转换函数(将类对象-->其他类型)--- 重载标准类型
解决的问题
类型转换函数可以将一个类的对象转换成另一类型的的数据。
语法:
operator 类型名(){ 实现转换的语句; return 转换类型后的变量; }; // 函数名是:operator 类型名 1.类型转换函数没有返回值 2.类型转换函数没有参数 3.其返回值类型由函数名中的类型名所指定的。eg:operator double();// 就是将当前对象转为double类型 4.类型转换函数只能作为成员函数,因为转换的主体是本类的对象。不能作为友元函数或普通函数.
eg:
Complex c1,c2;double d1; d1 = d2 + c1; // 编译器处理流程:编译器发现"+"左侧是double类型,右侧c1是Complex类对象, // 1.先判断是否有运算符重载,有调用运算符重载 // 2.否则,判断Complex类中是否有类型转换函数,有的话将Complex转换成double类型在和d1相加