关于C++的一道问题。。。

2025-03-10 19:05:42
推荐回答(2个)
回答1:

operator double(); 因为class R里有这个函数。
operator double()和double operator ()不同,前者是转换操作符(是一种特殊的类成员函数);后者是()运算符重载,返回值为double型。
简单的说就是为class R的对象向double转换时提供一种转换方式,是不需要显式写出()就可以完成的。
e=R(r);r是一个class R的对象,这句话首先是将r作为一个参数传个默认拷贝构造函数构造一个R对象.也就是说R(r),是调用了默认拷贝构造函数返回了一个R对象,然后这个对象通过=操作赋值给一个double型变量e,此时调用了转换操作符,也就是operator double()完成了R对象向double型变量的转换。
f=(R)r;这个语句其实很蛋疼,因为r本来就是一个R对象,这里的(R)r,做C++以及C语言里默认的强制类型转换将r转换成R类型的对象,类似于 int a; double d = (double)a; 然后再将这个对象通过=操作赋值给f,f也是一个double变量,所以也调用了转换操作符。

R::operator double()
{
return double(den)/double(num);
}
这里就是转换操作符的具体实现。

关于转换操作符,建议你看看C++的书,(推荐 《C++ Primer》中文版第四版的第455页)

回答2:

5/8 = 0.625
所以执行结果为:
d = 5.325000
e = 0.625000
f = 0.625000

其中
operator double();重载类型转换运算符double,使得类型R在与double类型变量的运算中会隐式转换为double类型
R r(5,8)定义了类型R的实例r,double值为0.625
e=R(r);表示创建r的副本并赋值给e
f=(R)r;表示将r强制转换为R并赋值给f

本人拙见,仅供参考