c++类的自动类型转换和强制类型转换

下面讨论类的类型转换。
我们先来看看C++是如何处理内置类型转换的。将一个标准类型变量的值赋给另一种标准类型的变量时,如果这两种类型兼容,则C++自动将这个值转换为接受变量的类型。

double time = 11; //int value 11 converted to type double

利用构造函数将内置类型->类
在C++中,接受一个参数的构造函数为将类型与该参数相同的值转换为类提供了蓝图。下面的构造函数用于将double转换为Stonewt类类型;

class Stonewt
{};
Stonewt(double l);//double to Stonewt conversion

Stonewt myCat;
myCat = 19.6;//convert 19.6 to Stonewt

注意!!只有接受一个参数的构造函数才能作为转换函数
Stonewt(int stn, double lbs); //not a conversion function
但若给第二个参数提供默认值,则可以:
Stonewt(int stn, double lbs = 0); // int to Stonewt conversion

上面介绍的是隐式转换,但通常这会导致意外的类型转换,C++的关键字explict限制了这种隐式转换,可以这样声明构造函数:
explicit Stonewt(double lbs); // 不允许隐式转换
Stonewt myCat;
myCat = 19.6 ;// not valid
myCat = Stonewt (19.6) ;// valid
myCat = (Stonewt) 19.6 ; // valid

小结:
对于构造函数Stonewt(double),若在声明使用了explicit,则Stonewt(double) 将只用于显示强制类型转换。若在声明前没有加explicit关键字,则可以用于下面的隐式转换:

1)将Stonewt对象初始化double值时
2)将double值赋给Stonewt对象时
3)将double值传递给接受Stonewt参数的函数时。
4)返回值被声明为Stonewt的函数试图返回double值时。
5)在上述任意一种情况下,使用可转换为double类型的内置类型时。

类类型->内置类型(转换函数)
上面讲了利用构造函数将内置类型转换为类类型,也可以利用特殊的C++运算符函数----转换函数做相反的转换。
转换函数是用户定义的强制类型转换。如果定义了从Stonewt到double的转换函数,则可以使用下面的转换:

Stonewt wolfe(285.7);
double host = double (wolfe);
double thinker = (double) wolfe;
double star = wolfe;

那如何创建转换函数呢?要转换为typeName类型,需要下面类型的转换函数:
operator typeName();
Notice:
1)转换函数必须是类方法;
2)转换函数不能指定返回类型;
3)转换函数不能有参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值