Перенаправление исключительных ситуаций



Иногда возникает положение, при котором необходимо обработать исключительную ситуацию сначала на более низком уровне вложенности блока try, а затем передать ее на более высокий уровень для продолжения обработки. Для того чтобы сделать это, нужно использовать throw без аргументов. В этом случае исключительная ситуация будет перенаправлена к следующему подходящему обработчику (подходящий обработчик не ищется ниже в текущем списке − сразу осуществляется поиск на более высоком уровне). Приводимый ниже

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

#include<iostream>

using namespace std;

void func(int i)

{ try{

if(i) throw "Error";

}

catch(char *s) {

cout<<s<<"- выполняется первый обработчик"<<endl;

throw;

}

}

int main()

{ try{

func(1);

}

catch(char *s) {

cout<<s<<"- выполняется второй обработчик"<<endl;

}

}

Результат выполнения программы:

Error - выполняется первый обработчик

Error - выполняется второй обработчик

Если ключевое слово trow используется вне блока catch, то автоматически

будет вызвана функция terminate(), которая по умолчанию завершает программу.

 


 


Дата добавления: 2015-12-21; просмотров: 193; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!