C++ для новичков: обработка исключений

Рассматривается обработка ошибок в C++. В качестве примера создадим и улучшим функцию с помощью обработки исключений.

Создание функции без обработки ошибок

Функция divide выполняет деление двух чисел типа float:

float divide(float a, float b) {
  return a / b;
}

Вызов с корректными аргументами (например, divide(5.2, 1.2)) выведет результат. Деление на ноль приведёт к ошибке.

Обработка ошибок с помощью throw

Добавим проверку и выброс исключения при делении на ноль:

float divide(float a, float b) {
  if (b == 0) {
    throw "Деление на ноль!"; // Выбрасываем исключение (строка)
  }
  return a / b;
}

Если b равно нулю, функция выбросит исключение со строкой «Деление на ноль!». Выбрасывание строки может привести к ошибке компиляции в некоторых версиях C++. Надежнее использовать числовое значение.

Обработка исключений с помощью try-catch

Для обработки выброшенного исключения используется конструкция try-catch:

try {
  divide(5.2, 0); // Вызов функции, которая может выбросить исключение
} catch (const char* error) { // Ловим исключение типа const char*
  if (strcmp(error, "Деление на ноль!") == 0) {
    std::cout << "Ошибка при делении на 0." << std::endl;
  }
}

Блок try содержит код, который может выбросить исключение. При возникновении исключения, выполнение блока try прерывается, и управление передаётся блоку catch. Блок catch ловит исключения типа const char* и проверяет, соответствует ли оно сообщению «Деление на ноль!».

Улучшение обработки исключений: использование чисел

Использование строк в качестве исключений проблематично. Лучше использовать целые числа:

float divide(float a, float b) {
  if (b == 0) {
    throw 100; // Выбрасываем исключение (число)
  }
  return a / b;
}

try {
  divide(5.2, 0);
} catch (int error) {
  if (error == 100) {
    std::cout << "Ошибка при делении на 0." << std::endl;
  }
}

Этот вариант более надёжен.

Зачем нужны обработчики исключений?

В простом примере обработка деления на ноль может показаться избыточной. Однако, обработчики исключений необходимы для работы со сложными библиотеками, генерирующими различные ошибки. try-catch позволяет обрабатывать эти ошибки без остановки программы.

Конструкция try-catch — важный инструмент для обработки ошибок и исключений в C++. Хотя в простых программах она может показаться излишней, её использование необходимо при работе со сложными библиотеками и большим объёмом кода. Рассмотрены основы работы с обработчиками исключений.

Что будем искать? Например,программа