【发布时间】: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