С++ «Неделя четвертая - Исключения - Исключения в классе Rational» #22
Запись от acmades размещена 24.08.2017 в 14:18
Показов 38305
Комментарии 2
|
Продолжаю курс: «Основы разработки на C++: белый пояс» Простое задание: Ссылка на предыдущее задание Вспомним класс Rational, который мы реализовали в задачах, посвящённых перегрузке операторов. Там специально говорилось, что в тестах объекты класса Rational никогда не создаются с нулевым знаменателем и никогда не выполняется деление на ноль. Настало время избавиться от этого ограничения и научиться обрабатывать нулевой знаменатель и деление на ноль. В этой задаче вам предстоит это сделать. Поменяйте реализацию конструктора класса Rational так, чтобы он выбрасывал исключение invalid_argument, если знаменатель равен нулю. Кроме того, переделайте реализацию оператора деления для класса Rational так, чтобы он выбрасывал исключение domain_error, если делитель равен нулю. Напомним, что вам надо реализовать интерфейс
| |||||||||||||||
Размещено в Основы разработки на C++: белый пояс
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 2
Комментарии
-
Или еще проще используя базовый класс std::logic_errorC++ 1 2 3 4 5 6 7 8 9 10 11 12 13
try { Rational r(1, 0); auto x = Rational(1, 2) / Rational(0, 1); } catch (const invalid_argument& e) { cerr<< e.what() <<endl; } catch (const domain_error& e) { cerr<< e.what() <<endl; }
C++ 1 2 3 4 5 6 7 8 9
try { Rational r(1, 0); auto x = Rational(1, 2) / Rational(0, 1); } catch (const std::logic_error& e) { cerr<< e.what() <<endl; }
Запись от Avazart размещена 18.04.2018 в 11:54
-
Как насчет использовать список инициализации и перегрузить большеC++ 1 2 3 4
Rational() { num = 0; den = 1; }
золотаоператоров?
Например относительно int
И деление на 0 мне кажется тут вполне уместно ибо сама операция / 0 по факту не происходит,
Так что вероятно можно обойтись без проверки нуля в знаменателе.
(1/2) / (0/1) = (1/0) т.е. бесконечность т.е. вроде INF / -INF для float.Запись от Avazart размещена 07.05.2018 в 10:10


