не получается перегрузить оператор ввода.
Выскакивает ошибка:
бинарный ">>": не найден оператор, принимающий левый операнд типа "std::istream" (или приемлемое преобразование отсутствует)
В чем может быть проблема?
class Rational {
public:
Rational() {
numerator = 0;
denominator = 1;
}
Rational(int num, int denom) {
int a = abs(num);
int b = abs(denom);
int nod;
while (a != 0 && b != 0){
if (a > b)
a = a % b;
else
b = b % a;
}
nod = a + b;
if ((denom < 0 && num>0) || (denom < 0 && num < 0)) {
num = -num;
denom = -denom;
}
numerator = num / nod;
denominator = denom / nod;
}
int Numerator() const {
return numerator;
}
int Denominator() const {
return denominator;
}
private:
int numerator, denominator;
};
Определите оператор как друг класса:
class Rational {
public:
Rational() : numerator(0), denominator(1) {}
//...
friend istream& operator >>(istream& stream, Rational& r)
{
char c;
stream >> numerator >> c >> denominator;
return stream;
}
private:
int numerator, denominator;
};
Вы же так хотели кажется?..
Сборка персонального компьютера от Artline: умный выбор для современных пользователей