我有一個分數類,允許以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