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

class Stonet
{
   private:
       enum{Lbs_per_stn=14};
       int stone;
       double pds_left;
       double pounds;
   public:
     ........
};


转换函数

既然可以将数字转换为类类型,那可以做相反的转换吗?也就是说,是否可以将类类型转换为数字类型,就如如下所示那样?

Stonewt wolfe(285.7);
double host=wolfe;

可以这样做,但是不是使用构造函数。构造函数只用于从某种类型到类类型的转换。要进行相反的转换,必须使用特殊的C++运算符函数——转换函数。

转换函数是用户定义的强制类型转换,可以像使用强制类型转换那样使用它们。例如,如果定义了从Stonewt到double的转换函数,就可以使用下面的转换:

Stonewt wolfe(285.7);
double host=double(wolfe);
double thinker=(double)wolfe;
也可以让编译器来觉得如何做:
Stonewt wells(20,3);
double star=wells;

编译器发现,右侧是Stonewt类型,而左侧是double类型,因此它将查看程序是否定义了与此匹配的转换函数。(如果没有找到这样的定义,编译器将生成错误消息,指出无法将Stonewt赋给double。)


那么,如何创建转换函数呢?要转换为typaname类型,需要使用这种形式的转换函数:

operator typeName();

请注意以下几点:

1)转换函数必须是类方法;

2)转换函数不能指定返回类型;

3)转换函数不能有参数。

例如,转换为double类型的函数原型如下:

operator double();


typeName指出了要转换的类型,因此不需要指定返回类型。转换函数时类方法意味着:他需要通过来对象来调用,从而告知函数要转换的值。因此,函数不需要参数。


要添加将stone_wt对象转换为int类型和double类型的函数,需要将下面的有原型添加到类声明中:

operator int();

operator double();


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值