简而言之,我做了课程分数:
class Fraction
{
int N;
int D;
public:
ostream& operator <<(ostream &);
operator float();
};
并且在函数main()中我有:
Fraction a(3, 4);
cout << a << " = " << endl;
cout << (float)a << endl;
作为输出我得到:
0.750000 = 0.750000
为什么运营商&lt;&lt;未使用(应打印“(3/4)”)。
我的运营商&lt;&lt;如果我删除操作符浮动工作正常,但我需要转换Fraction浮动一些其他方法和函数。 我如何使用输出操作符。
通缉输出:
( 3/4 ) = 0.750000
答案 0 :(得分:1)
在您的课程之外实施operator <<
,作为非会员(朋友)功能。
答案 1 :(得分:1)
您的输出operator<<
应该接受流作为第一个参数,并将该分数作为第二个参数。现在,它正好相反(分数是第一个参数,流是第二个参数)。这意味着不调用运算符,而是将分数转换为float
,然后显示浮点数。
您编写的运算符可以使用a << cout
调用,这显然是错误的。
不应将其作为成员运算符,而应将此运算符实现为类外的(朋友)非成员。
样本签名:
std::ostream& operator<<(std::ostream& os, const Fraction& f);
答案 2 :(得分:0)
operator<<
不应该是您的类的成员,因为它需要将流对象作为其第一个参数并且具有签名ostream &operator<<(ostream &, Fraction)
。