У меня есть класс Fraction, который позволяет вводить дробь в виде c/d. Я могу нормально выводить и вводить дроби, но когда я изменяю их с помощью своей пользовательской функции, показанной ниже, она вообще ничего не делает.
У меня есть следующие перегруженные операторы >> и ‹‹:
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;
}
Затем я пытаюсь вывести результат в main следующим образом:
setEqualDen(Fa, Fb);
cout << "The fractions are " << Fa << " , " << Fb <<
endl;
Это не работает. Есть ли необходимый шаг, такой как двойная перегрузка операторов ‹‹ и >> в C++, или мой синтаксис просто что-то упускает?
setEqualDen
копирует свои аргументы, а не берет их по ссылке. Если проблема не в этом, объясните, что вы подразумеваете под двойной перегрузкой, и опубликуйте сообщения об ошибках, ожидаемый результат и т. д. - person Praetorian   schedule 24.02.2015