Программа C++ для обработки проверенных исключений

Опубликовано: 18 Февраля, 2023

Исключение — это ошибка времени выполнения, которая возникает во время выполнения программы и нарушает нормальный ход инструкций программы. Например, Нехватка памяти, Недостаток места на диске, Деление на ноль и т. д.

Типы исключений

Существует два типа исключений: встроенные исключения и исключения, определяемые пользователем. Встроенные исключения можно разделить на 2 основные категории:

  1. Checked Exception: Это исключения времени компиляции, потому что эти исключения проверяются компилятором во время компиляции. Компиляция гарантирует, обрабатывает ли программист исключение или нет.
  2. Непроверенное исключение: компилятор не будет проверять непроверенные исключения во время компиляции. Это происходит, когда уверенный вводит неверный ввод во время взаимодействия с программой.

Что такое проверенные исключения?

Исключение проверяется компилятором на плавность выполнения программы во время выполнения.

  • Отмеченные исключения обычно возникают как исключения. Таким образом, компилятор очень заботится об этих исключениях.
  • Возможно, метод объявляет, что может генерировать исключение, но на самом деле это не так. Тем не менее, вызывающий должен иметь дело с этим.
  • Объявление проверенного исключения имеет эффект домино. Любые методы, которые будут использовать предыдущий метод, также должны будут обрабатывать проверенное исключение.

Класс Exception — это базовый класс, от которого наследуются исключения. Например, иерархия классов InvalidCastException выглядит следующим образом: Object. Исключение. Системное исключение.

Почему исключения не проверяются компилятором в C++?

C++ предоставляет синтаксис для проверяемых исключений.

Пример:

void G() throw(Exception);

void f() throw();

Исключения не проверяются компилятором в C++ по трем причинам:

1. Спецификации исключений C++ препятствуют оптимизации: за исключением, возможно, throw(), компиляторы вставляют дополнительный код, чтобы проверить, что когда вы выбрасываете исключение, оно соответствует спецификации исключения функций во время очистки стека. Способ сделать вашу программу медленнее.

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

void AStupidFunction() throw()
{
   throw 42;
}

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

3. Спецификации исключений C++ являются частью сигнатуры функции: если у вас есть базовый класс с виртуальной функцией и вы пытаетесь переопределить ее, спецификации исключений должны точно совпадать. Итак, вам лучше планировать заранее, и это все еще боль.

struct A
{
   virtual int value() const throw() 
   {
      return 10;
   }
}

struct B : public A
{
   // ERROR!
   virtual int value() const 
   {
       return functionThatCanThrow();
   } 
}

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

Обработка исключений

Обработка исключений — это процесс обработки ошибок времени выполнения. Выполняем обработку исключений. Таким образом, нормальный ход программы может поддерживаться даже после ошибок во время выполнения. Он предназначен для обработки синхронных исключений только в программе. Обработка исключений C++ основана на трех ключевых словах: try, catch и throw.

1. блок try: блок кода, содержащий другой код, который потенциально может иметь исключение.

Синтаксис:

try{
  statement1;
  statement2;
}

2. catch: обрабатывает исключение с помощью какого-то решения.

Синтаксис:

try{
  statement1;
  statement2;
}

catch (argument)
{
   // Action
  statement3;
}

3. throw: этот оператор может быть добавлен в любом месте после какого-либо исключения.

throw(excep);

throw excep;

throw; // re-throw

Как вы обрабатываете исключения?

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

Try-catch — простейший метод обработки исключений. Поместите код, который вы хотите запустить, в блок try, и любые исключения Java, которые выдает этот код, перехватываются одним или несколькими блоками catch. Этот метод будет перехватывать любые типы исключений Java, которые возникают. Это простейший механизм обработки исключений.

Ниже приведена программа C++ для обработки проверенных исключений:

Выход:

Division by zero!