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

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

Исключение – это проблема, возникающая во время выполнения программы. Исключение C++ – это реакция на особые обстоятельства, возникающие во время выполнения программы, такие как попытка деления на ноль.

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

  • throw-программа выдает исключение, когда появляется проблема. Это делается с помощью ключевого слова throw.
  • catch-программа ловит исключение с помощью обработчика исключений в том месте программы, где вы хотите обработать проблему. Ключевое слово catch указывает на перехват исключения.
  • try-блок try определяет блок кода, для которого будут активированы определенные исключения. За ним следует один или несколько блоков catch.

Предполагая, что блок вызовет исключение, метод ловит исключение, используя комбинацию ключевых слов try и catch. Блок try/catch помещается вокруг кода, который может генерировать исключение. Код внутри блока try/catch называется защищенным кодом, а синтаксис использования try/catch выглядит следующим образом:

try {

   // protected code

} catch( ExceptionName e1 ) {

   // catch block

} catch( ExceptionName e2 ) {

   // catch block

} catch( ExceptionName eN ) {

   // catch block

}

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

Почему Обработка Исключений?

Ниже приведены основные преимущества обработки исключений по сравнению с традиционной обработкой ошибок.

  1. Отделение кода обработки ошибок от обычного кода: в традиционных кодах обработки ошибок всегда существуют условия if else для обработки ошибок. Эти условия и код для обработки ошибок смешиваются с нормальным потоком. Это делает код менее читаемым и поддерживаемым. С блоками try catch код для обработки ошибок становится отдельным от обычного потока.
  2. Функции / Методы могут обрабатывать любые исключения, которые они выбирают: функция может выдавать много исключений, но может выбрать обработку некоторых из них. Другие исключения, которые выбрасываются, но не перехвачены, могут быть обработаны вызывающим. Если вызывающий абонент решает не перехватывать их, то исключения обрабатываются вызывающим абонентом вызывающего абонента. В C++ функция может указать исключения, которые она создает, используя ключевое слово throw. Вызывающий эту функцию должен каким-то образом обработать исключение (либо указав его снова, либо поймав)
  1. Группировка типов ошибок: в C++ как базовые типы, так и объекты могут быть выброшены как исключение. Мы можем создавать иерархию объектов исключений, группировать исключения в пространствах имен или классах, классифицировать их по типам.

Генерирование исключений

Исключения могут быть созданы в любом месте блока кода с помощью оператора throw. Операнд оператора throw определяет тип исключения и может быть любым выражением, а тип результата выражения определяет тип создаваемого исключения.

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

double division(int a, int b) {

   if( b == 0 ) {

      throw “Division by zero condition!”;

   }

   return (a/b);

}

Перехват Исключений

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

try {

// protected code} catch( ExceptionName e )

{

// code to handle ExceptionName exception

}

Приведенный выше код перехватит исключение типа ExceptionName. Если вы хотите указать, что блок catch должен обрабатывать любой тип исключения, вызванного в блоке try, вы должны поставить многоточие,…, между скобками, заключающими объявление исключения следующим образом:

try {

   // protected code

} catch(…) {

  // code to handle any exception

}

Стандартные Исключения C++

C++ предоставляет список стандартных исключений, определенных в <exception>, которые мы можем использовать в наших программах. Они расположены в иерархии родительско-дочерних классов, показанной ниже –

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

Иерархия классов исключений


.

  • December 8, 2020