我有一个分数类,允许以c/d格式输入分数。 我可以输出和输入分数就好了,但是当我用我的自定义函数修改它们时,如下所示,它什么都不做。在C++中双重载入istream和ostream运算符
我有以下重载>>和< <运算符:
ostream& operator<<(ostream &out, const Fraction &f)
{
char x = '/';
out << f.num;
out << x;
out << f.den;
return out;
}
istream& operator>>(istream &in, Fraction &r)
{
//in >> r;
int whole = 0, num, den = 1;
char next;
in >> num;
next = in.peek();
if(next == '+'){
in.get();
whole = num;
in >> num;
next = in.peek();
}
if(next == '/'){
in.get();
in >> den;
}
if(whole != 0){
num += (whole * den);
}
if(den == 0){
den = 1;
}
r.num = num;
r.den = den;
return in;
}
此外,我有一个函数,使两种级分以使它们具有相同的公分母:
void setEqualDen(Fraction a, Fraction b){
int tempa = a.den;
int tempb = b.den;
a.den *= tempb;
b.den *= tempa;
a.num *= tempb;
b.num *= tempa;
}
然后我尝试输出结果如下:
setEqualDen(Fa, Fb);
cout << "The fractions are " << Fa << " , " << Fb <<
endl;
这不起作用。是否有必要的步骤,如双重重载C++中的<和>>操作符,还是我的语法只是缺少一些东西?
你是什么意思*不起作用*?如果你的意思是结果不符合你的期望,那么这是因为'setEqualDen'复制了它的参数,而不是通过引用来引用它们。如果这不是问题,那么请解释* double overload *的含义,并发布错误消息,预期输出等。 – Praetorian 2015-02-24 00:04:46
您的输入函数失败,并显示“1 +/25”。 – 2015-02-24 00:12:09
而不是假设空白的数量,你应该跳过它。 – 2015-02-24 00:13:47