Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpPmExFn 364 of 390 menu
◀ ▶

Функция с исключением в C++

Проверку аргумента прячут внутрь функции. Если значение не годится, функция выбрасывает исключение, а вызывающий код решает, что показать.

Функция возвращает элемент вектора по индексу только для неотрицательного индекса. Иначе - std::invalid_argument:

int getAt(const std::vector<int>& vec, int index) { if (index < 0) { throw std::invalid_argument("negative index"); } return vec.at(index); } int main() { return 0; }

Вызов оборачивают в try-catch, чтобы отловить и неверный аргумент, и выход за границы вектора:

int main() { std::vector<int> vec = {10, 20, 30}; try { std::cout << getAt(vec, -1) << "\n"; } catch (const std::invalid_argument& e) { std::cout << "bad arg\n"; } catch (const std::out_of_range& e) { std::cout << "out of list\n"; } return 0; }

Та же схема работает для проверки диапазона возраста или процента. Несколько catch подряд позволяют развести сообщения для разных типов сбоя в одном месте вызова:

void percent(int value) { if (value < 0 || value > 100) { throw std::invalid_argument("out of range"); } std::cout << value << "%\n"; } int main() { try { percent(150); } catch (const std::invalid_argument& e) { std::cout << "invalid percent\n"; } return 0; }

Создайте функцию ensureNonNegative с параметром n. Для n < 0 выбросьте std::invalid_argument с сообщением "negative". Иначе верните n.

Создайте функцию divide с двумя целыми параметрами. При b == 0 выбросьте std::runtime_error. Иначе верните частное. В main вызовите ее с нулевым делителем в try-catch и выведите "fail" при ошибке.

Создайте функцию charAtSafe со строкой и индексом. При отрицательном индексе выбросьте std::invalid_argument. Иначе верните символ строки. Обработайте вызов с большим индексом через std::out_of_range.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить