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();