// io/frac2in.hpp #include template inline std::basic_istream& operator >> (std::basic_istream& strm, Fraction& f) { int n, d; // Ввод числителя strm >> n; /* Если числитель прочитан успешно * - прочитать '/' и знаменатель */ if (strm.peek() == '/') { strm.ignore(); strm >> d; } else { d = 1; } /* Если знаменатель равен нулю * - установить failbit как признак ошибки форматирования ввода-вывода */ if (d == 0) { strm.setstate(std::ios::failbit); return strm; } /* Если все прошло успешно, * изменить значение дроби */ if (strm) { f = Fraction(n,d); } return strm; }