У меня есть класс фракций, который позволяет вводить дробь в виде c/d. Я могу выводить и вводить фракции просто отлично, но когда я изменяю их с помощью своей пользовательской функции, показанной ниже, она ничего не делает.Двойная перегрузка операторов istream и ostream в C++
У меня есть следующий перегружена >> и < < операторов:
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' делает копии своих аргументов вместо того, чтобы брать их по ссылке. Если это не проблема, объясните, что вы подразумеваете под двойной перегрузкой *, а также сообщения об ошибках, ожидаемом выходе и т. Д. – Praetorian
Ваша входная функция не работает с этим текстом: «1 +/25». –
Вместо того, чтобы предполагать количество пробелов, вы должны пропустить его. –