#include <iostream>
#include <cstdio>
using namespace std;
class F
{
int n;
int d;
public:
F(int n = 0, int d = 1):n(n),d(d)
{
}
//不要返回值
//类型转换运算符函数,将当前对象转成double
//double operator double()
operator double()
{
return n*1.0/d;
}
operator int()
{
return int(n*1.0/d + 0.5); //会损失精度,四舍五入
}
//转换成字符串
operator string()
{
char buf[10] = {};
sprintf(buf,"%d/%d",n,d);
return buf; //C++自动做了类型转换 return string(buf);
}
};
void fa(double d)
{
cout << "in fa d=" << d << endl;
}
int main()
{
int x = 3;
double d;
d = x; //隐式类型转换,int to double
F f1(1,2);
//到底是怎么转换的呢?
//这里f1里就两个数,怎么转换成浮点的?
//隐藏在重载函数double里面了?
d = (double)f1; //f1.operator double();
d = f1; //和上一句一个意思
fa(f1); //fa里需要double类型的参数
int i1 = f1; //会自动调用operator int()函数
cout << i1 << endl;
string str = f1; //会自动调用operator string()函数
cout << str << endl;
}
/*
in fa d=0.5
1
1/2
*/
重载类型转换运算符double,int,string
最新推荐文章于 2023-07-13 18:15:25 发布