【问题标题】:Operator overloading "float" and "<<" [duplicate]运算符重载“float”和“<<”[重复]
【发布时间】:2015-02-23 08:00:24
【问题描述】:

简而言之,我做了一个分数类:

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

为什么运算符

如果我删除操作符浮点数,我的操作符

想要的输出:

( 3/4 ) = 0.750000

【问题讨论】:

  • 您可以向我们展示您的overloaded &lt;&lt; 定义吗?
  • 另外你应该有类似friend ostream&amp; operator &lt;&lt;(ostream &amp;, const Fraction&amp;);

标签: c++ operators overloading


【解决方案1】:

您的输出operator&lt;&lt; 应该接受流作为第一个参数,分数作为第二个参数。现在,它做相反的事情(分数是第一个参数,流是第二个)。这意味着不调用运算符,而是将分数转换为float,然后显示浮点数。

你写的操作符可以用a &lt;&lt; cout调用,这显然是错误的。

您应该将此运算符作为(朋友)非成员在您的班级之外实现,而不是使其成为成员运算符。

样本签名:

std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const Fraction&amp; f);

【讨论】:

  • 使操作员 (-3/4) cout
  • @user3464829 我无法仅通过您发布的详细信息来回答这个问题。你应该发布更多细节(你能做的最好的是将代码剥离到基本要素(最多 40 行),所以我可以简单地将它粘贴到我的 IDE 中并编译),但是......你可能会更好地询问另一个问题。
  • 正如@πάντα ῥεῖ 所说,我做了运算符friend ostream& operator <<(ostream &, const Fraction&);(我想念“const”),现在一切正常。
【解决方案2】:

在你的类之外实现operator &lt;&lt;,作为非成员(朋友)函数。

Operator overloading

【讨论】:

    【解决方案3】:

    operator&lt;&lt; 不应该是您的类的成员,因为它需要将流对象作为其第一个参数并具有签名 ostream &amp;operator&lt;&lt;(ostream &amp;, Fraction)

    【讨论】:

    • 为什么按价值Fraction?这很不寻常。
    • @πάνταῥεῖ 为什么不呢?据我所知,它很可能是一个有两个 float 成员的 POD。没有必要通过引用和其他东西传递它。
    猜你喜欢
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 2015-06-20
    • 2016-02-03
    • 2011-10-27
    • 2013-03-12
    • 2011-11-12
    相关资源
    最近更新 更多