Помогите с перегрузкой оператора ввода

200
24 ноября 2017, 07:34

Короче, задача такая: перегрузить оператор ввода класса дроби, при этом учесть, что если введен знаменатель "0", то должно выбрасываться исключение (не из оператора ввода, а из конструктора класса, он уже написан) ну еще нужно проверить является ли вводимый char c слэшом('/').

istream & operator >> (istream & stream, Rational & rational)
 {
    int a, b;
    char c;
     stream >> a >> c >> b;
    //тут что-то помутить с флагами, чтобы решить задачу
    rational._num = a;
    rational._denom = b;
    rational.reduce();
    return stream;
 }
Answer 1

Ну, я как минимум проверял бы состояние потока после чтения, и не пытался бы ничего делать, если оно не good. Далее проверял бы этот c, если не оно - генерировал бы исключение типа bad_format или, как вариант, устанавливал соответствующий флаг потока. Потом создавал бы новый объект из введенных данных - тогда он сам бы генерировал исключение, если что, при этом старый объект оставался бы в корректном состоянии - по сути, транзакция... Если все в порядке и тут - вот только тогда бы выполнял присваивание переданному rational.

READ ALSO
Переделать из stl в rtl

Переделать из stl в rtl

Всем доброго дня, необходимо было написать программу разрезания многоугольника прямой, дело сделаноПравда использовал библиотеку шаблонов...

276
Передача двумерного массива по ссылке С++

Передача двумерного массива по ссылке С++

Есть двумерный массив чиселInt mass[15][20] Нужно передать его в функцию так, чтобы изменение его в функции отражалось в main

218
Изменить код под статичный массив (c++)

Изменить код под статичный массив (c++)

Доброго времени сутокЕсть код, который нужно изменить под статичный массив

244
Проблемы с выводом на русском языке [дубликат]

Проблемы с выводом на русском языке [дубликат]

На данный вопрос уже ответили:

210