转换函数存在的原因:反转赋值顺序:将类对象赋值给一个基本类型值。
代码:
#include <iostream>
class Stone {
private:
int stone;
double pounds;
public:
Stone();
~Stone();
operator double() const;
operator int() const;
};
int main()
{
Stone object();
double a = object; //隐式转换
int b = object; //隐式转换
cout << double(object) << int(object); //显示转换
}
分析:
(1)转换函数:①必须是类方法,受Stone::限定;②不能指定返回类型;③不能有参数;④必须返回转换后的值。
(2)将基本类型值赋值给对象:会将接受唯一一个参数的构造函数作为转换函数,完成工作;
将对象赋值给基本类型值:需要自定义转换函数。
(3)转换函数也可以使用explicit来强制显示调用:
explicit operator double() const;