c++中某些标准类型的数据之间可以自动转换,也就是隐式转换,由c++编译系统自动完成的,用户不需要干预!
强制类型转换(显式类型转换):在程序中将一种类型数据明确转换成另一指定的类型!
而对于用户自定义的类型,编译系统并不知道如何进行转换,因此需要自定义函数:转换构造函数和类型转换函数!
类的几种构造函数:可以同时出现在同一类中(构造函数的重载):
默认构造函数;
用于初始化的构造函数;
用于复制对象的复制构造函数;
转换构造函数:将一个其他类型的数据转换成一个类的对象的构造函数:
比如:Complex::Complex(double r){real=r;imag=0;}//完成指定类型到本类对象的转换
上面的例子中完成了double向Complex的转换!而对于这个例子来说,如果有c3=c1+2.5的话,就是非法的,
除非定义了相应的运算符重载函数!但是如果是c3=c1+Complex(2.5)的话,就是合法的,因为利用了转换构造函数,相当于强制类型转换!
通常把有一个参数的构造函数用作类型转换,而不做别的用途!!
对于上面的例子来说,用转换构造函数可以将一个标准类型的数据转换为类的对象!但是,转换构造函数不能反过来
将一个类的对象转换为一个标准类型的数据!因此需要用到类型转换函数!类型转换函数不是一个构造函数,而是一个成员函数!
用类型转换函数将一个类的对象转换成另一类型的数据,比如:
在Complex类中定义类型转换函数(成员函数):
Complex::operator double(){return real;}这个程序中,operator是关键词
对于上面的程序,main函数中,2.5+c1的时候,c1会自动调用operator double函数转换成double类型,然后和2.5相加;然后对于d2=c1+c2来说,会将计算结果先调用类型转换函数变成double类型,然后赋值给d2.这种情形类似于自动类型转换!
类型转化函数也称为类型转换运算符函数,类型转换运算符重载函数,强制类型转换运算符重载函数。
不同类型进行各种混合运算的方案:
转换构造函数:标准类型转换成自定义类
类型转换函数:将一个类对象转换成标准类型数据
运算符重载函数
进行各种运算时 ,使用类型转换函数,而不是对多种运算符进行重载,工作量小,程序精干!!
防止二义性!!