在分数类中实现分数简化

Implementing fraction simplification in a fraction class

本文关键字:实现      更新时间:2023-10-16

所以我已经在这堂课上工作了几天。整个程序都很好地编译,除了我真的不确定如何实施我的简化

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是const,所以不要做

fr=simplify(fr);

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