在分数类中实现分数简化

时间:2014-01-28 04:21:20

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

所以我已经在这个班上工作了几天。并且整个程序编译得很好,除了我真的不确定如何实现我的简化

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;
}

这导致什么都没发生。据我所知,因为分数是一个常量,但如果ostream的参数不是const,编译器对我非常不满意。我应该怎么做呢?

1 个答案:

答案 0 :(得分:0)

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

fr=simplify(fr);

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