不同类型数据间的转换

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.这种情形类似于自动类型转换!


类型转化函数也称为类型转换运算符函数,类型转换运算符重载函数,强制类型转换运算符重载函数。


不同类型进行各种混合运算的方案:

转换构造函数:标准类型转换成自定义类

类型转换函数:将一个类对象转换成标准类型数据

运算符重载函数


进行各种运算时 ,使用类型转换函数,而不是对多种运算符进行重载,工作量小,程序精干!!


防止二义性!!




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值