Короче, задача такая: перегрузить оператор ввода класса дроби, при этом учесть, что если введен знаменатель "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;
}
Ну, я как минимум проверял бы состояние потока после чтения, и не пытался бы ничего делать, если оно не good. Далее проверял бы этот c, если не оно - генерировал бы исключение типа bad_format или, как вариант, устанавливал соответствующий флаг потока. Потом создавал бы новый объект из введенных данных - тогда он сам бы генерировал исключение, если что, при этом старый объект оставался бы в корректном состоянии - по сути, транзакция... Если все в порядке и тут - вот только тогда бы выполнял присваивание переданному rational.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники