简单记录两种转换
转换的目的,是将数据与类进行互换,与重载意思接近。
利用转换函数,可以将类转换为数值,也可以将数值转换为类。
上代码
这是一个记录重量的类
Stonewt.h
class Stonewt{
private:
int stone;
double pounds;
public:
//explicit Stonewt(double lbs); 关闭自动转换
Stonewt(double lbs);
Stonewt();
~Stonewt();
operator int() const;
operator double() const;
};
Stonewt.cpp
Stonewt::Stonewt(double lbs)
{
pounds = lbs;
}
Stonewt::operator int() const
{
return (int)(pounds + 0.5);//四舍五入
}
Stonewt::operator double() const
{
return (double)pounds;
}
main.cpp
int main(void)
{
Stonewt mycat;
mycat = 23.5; //会自动调用 构造函数 Stonewt(double );
double b;
int c;
b = (double) mycat;
c = (int) mycat;
}
笔记
转换函数特点:
- 只有一个参数的构造函数,可以作为转换函数。
- 转换函数必须为成员函数。(只能是类的方法函数,不能用友元)
- 转换函数不能指定返回类型
- 转换函数不能有参数
- 如果想关闭 mycat = 23.5 这种自动转换的写法。让必须写成 mycat = Stonewt( 23.5) 这种写法的话。
可以在转换函数前面加上关键字 explicit ,关闭自动转换