您的位置:首页 > 其它

重载类型转换运算符double,int,string

2012-10-07 13:40 393 查看
#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
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐