C++重载类型转换运算符的简单认识
c++中提供了标准类型的相互转换,如执行语句:
n=(int)1.87;
则n=1,同样,可以进行这种类型转化运算符。这种重载运算符函数的格式如下:
operator 类型名()
{
函数体;
}
与以前的重载运算符不同的是,类型转换运算符重载函数没有返回类型,因为“类型名”就代表了它的返回类型,而且也没有任何参数。在调用过程中要带一个对象实参。
实际上,类型转换运算符将对象转换成类型规定的类型。转换时的形式就像强制转换一样。如果没有转换运算符定义,直接用强制转换类型是不行的,因为强制转化只能对标准数据类型进行操作,对类类型的操作是没有定义的。
另外,转换运算符重载的缺点是无法定义其类对象运算符操作的真正含义,因为只能进行相应对象成员数据和一般数据变量的转换操作。
·
【经典例题】设计一个程序,用于实现人民币到美元的转换
#include<iostream>
using namespace std;
class rmb
{
double r; //人民币
double rate; //汇率
public:
rmb(){} //构造函数
rmb(double x, double y) //构造函数
{
r = x;
rate = y;
}
operator double() //double类型转换重载转换符
{
return (r / rate);
}
void setvalue() //自行输入人民币与汇率
{
cout << "人民币:";
cin >> r;
cout << "汇率:";
cin >> rate;
}
void disp()
{
cout << "人民币" << ":" << r << "元(汇率为" << rate << ":1)";
}
};
int main()
{
rmb a, b(1000, 7.72); //构造函数在主函数中初始化
double m1, m2;
a.setvalue();
m1 = double(a); //调用double类型转换符成员函数
a.disp();
cout << "元<=>" << m1 << "美元" << endl;
m2 = double(b); //调用double类型转换符成员函数
b.disp();
cout<< "元<=>" << m2<< "美元" << endl;
return 0;
}