vc的一个运算符重载问题.

来源:百度知道 编辑:UC知道 时间:2024/05/17 09:17:57
#include<iostream>
using namespace std;
class R
{
public:
R(int d,int n)
{
den = d;
num = n;
}
operator double();
//这是运算符重载吗?如果是,请详细讲解一下语法应用,谢谢!
private:
int den,num;
};
R::operator double()
{
return double(den)/double(num);
}
int main(void)
{
R r(12,8);
double d=4.5,f=3.8;
d+=r-f;
cout << d << endl;
system("pause");
return 0;
}
了解了一些,谢谢你,但是还有点不明白:主函数中没有显式调用operator double()函数啊,它是在定义对象时自动调用的吗?还有它的返回值是返回给对象的吗?

是运算符重载。
这个例子里,它重载了强制类型转换运算符(double)
写法是:
operator double()
{
return double(den)/double(num);
}

它的作用是自定义强制类型转换运算符double()的实现方法。

例如:
//分数三分之二
R a( 2, 3 );

//把分数a强制转换为double型
//如果R的定义里没有定义operator double(),
//会出现编译错误
double d = (double)a;

详细的看
http://www.pcdog.com/edu/cpp/2005/12/w057920.html

-------------

d+=r-f;
这句中,d,f都是double型,因此r势必要转换为double型,这是隐式转换,同样适用于你定义的“转换为double”的操作符重载。
就是这个时候调用的函数operator double()。
它的返回值减去f,然后加到d上。

1、operator double(); 是重载了类型转换运算符
2、主函数中没有显式调用operator double()函数啊,它是在定义对象时自动调用的吗?
R r(12,8); //r构造函数中传递进来的是int型
double d=4.5,f=3.8;
d+=r-f; //但是这里要与double进行运算,就会自动调用
3、还有它的返回值是返回给对象的吗?
重载问题你并不需要理解返回值这个概念,例如上面的例子,它并不会影响r的类型,重载运算符只是为了适合我们的习惯,如果程序中使用的是单纯的int double型,我们可以直接