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

Определение исключений

Для того чтобы работать с исключениями, необходимо:

• Выделить контролируемый блок — блок try (контролировать, пытаться).

• Предусмотреть генерацию одного или нескольких исключений операторами throw (бросать, генерировать, посылать) внутри блока try или внутри функций, вызываемых из этого блока.

• Разместить сразу за блоком try один или несколько обработчиков исключений catch (ловить,перехватить).

Контролируемый блок — это составной оператор, перед которым записано ключевое слово try:

try {

// фрагмент кода

}

Оператор throw, предназначенный для генерации исключения, имеет вид: throw выражение.

Тип выражения, стоящего после throw, определяет тип порождаемого исключения. При генерации исключения выполнение текущего блока прекращается, и происходит поиск соответствующего обработчика и передача ему управления.

Синтаксис обработчиков напоминает определение функции с одним параметром и именем catch:

catch (/*... */)

{

// действия по обработке исключения

}

Объявление параметра обработчика возможно в одной из трех форм:

catch (Туре) { / / обработка исключения типа Туре }

catch (Туре info) {

/ / обработка исключения типа Туре

/ / с использованием значения info

}

catch (...) { // обработка исключений всех типов }

После обработки исключения управление передается первому оператору, находящемуся непосредственно за обработчиками исключений.

Туда же, минуя код всех обработчиков, передается управление, если исключение в try -блоке не было сгенерировано.

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

Общая схема посылки и обработки исключений выглядит так:

try {

операторы

throw выражение_1

операторы

throw выражение_2

операторы

}

catch ( спецификация_исключения_1 )

{ операторы_обработки_исключения_1 }

catch ( спецификация_исключения_2 )

{ операторы_обработки_исключения_2 }

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

Среди операторов, заключенных в фигурные скобки кроме обычных операторов, описаний и определений объектов программы, помещают специальные операторы, посылающие или генерирующие исключения. Формат оператора: throw выражение.

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

• создают копию параметра throw в виде временного статического объекта, тип и значение которого определяются формирующим его выражением; объект сохраняется до тех пор, пока исключение не будет обработано;

• в поисках подходящего обработчика раскручивают стек;

• передают объект исключения и управление программой непосредственно за блок контроля (за закрывающую фигурную скобку) обработчику, имеющему параметр, совместимый по типу с этим объектом;

· за блоком контроля обязательно размещается ловушка (или обработчик) исключений; исключения могут посылаться из разных мест блока контроля, они могут быть одного или разных типов; если за блоком контроля размещены несколько ловушек, то они должны отличаться типами принимаемых исключений;

· обработчик похож на функцию с одним параметром, не возвращающую значения:

catch ( спецификация_исключения )

{ операторы_обработки_исключения },

спецификация может иметь одну из трех форм:

тип_исключения имя

тип_исключения

многоточие

· посланное из блока контроля исключение ловится соответствующим ему обработчиком и после выполнения его операторов управление передается за последний обработчик;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: