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

来源:互联网 发布:科比单场81分数据 编辑:程序博客网 时间:2024/05/16 10:16
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
原创粉丝点击