【问题标题】:Implementing fraction simplification in a fraction class在分数类中实现分数化简
【发布时间】:2014-01-28 04:21:19
【问题描述】:

所以我已经在这门课上工作了几天。整个程序编译得很好,除了我真的不知道如何实现我的简化

fraction& simplify(const fraction& fr)
{
    int a;
    int b;
    int c;
    if(fr.Numerator>fr.Denominator)
    {
    a = fr.Numerator;
    b = fr.Denominator;
    }
    else if (fr.Numerator<fr.Denominator)
    {
        a = fr.Denominator;
        b = fr.Numerator;
    }
    else
    {
        a=fr.Numerator;
        fraction simplified(fr.Numerator/a,fr.Denominator/a);
        return simplified;
    }
    {
    while((b)!=0)
        {
            c=(a%b);
            a=b;
            b=c;
        };
    }
    fraction simplified(fr.Numerator/a,fr.Denominator/a);
    return simplified;
}

我想让它在我的输出函数中运行

ostream& operator<<(ostream& stream, const fraction& fr)
{
    simplify(fr);
    if(fr.Denominator==1||fr.Numerator==0)
        stream << fr.Numerator;
    else if(fr.Numerator>fr.Denominator)
    {
        cout << fr.Numerator/fr.Denominator << '+' << fr.Numerator%fr.Denominator << '/' << fr.Denominator;
    }
    else
    stream << fr.Numerator << '/' << fr.Denominator;
    return stream;
}

这并没有导致任何事情发生。据我所知,这是因为分数是 const,但如果 ostream 的参数不是 const,编译器会对我非常不满。我应该如何实施呢?

【问题讨论】:

  • 无关:您不会喜欢返回对自动变量的引用的结果。
  • 你传递了一个引用来简化但从不修改它。试试fr = simplify(fr);
  • @WhozCraig 那么我应该修改简化器以不返回参考吗?它应该操纵什么?我认为 JohnnyMopp 不起作用,因为 fr 是 const。我觉得我只是在操纵错误的东西
  • 然后你可以创建一个临时分数:fraction frToPrint = simplify(fr); 并在函数的其余部分使用它。
  • 你想让simplify修改它的参数('fr')吗?

标签: c++ function class operator-overloading output


【解决方案1】:

您应该将简单地 in 运算符重载函数的结果捕获到某个临时变量,因为 fr 是 const 所以不要这样做

fr=simplify(fr);

并使用该对象的属性而不是 fr

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 2011-12-08
    • 2011-07-14
    相关资源
    最近更新 更多