Обработка исключительных ситуаций (ИС)


throw – послать
try – испытать
catch – перехватить
ИС- условие, которое требует обработки. ИС – лучше всего использовать для обработки ошибок, возникающих при выполнении, однако их применение этим не ограничивается. Для возбуждения ИС throw посылает объект, описывающий суть ИС. Объект может быть литеральным значением, строкой, объектом класса или любым другим объектом. Для обработки ИС оператор catch перехватывает условие, посланное некоторым другим процессом, операторы, перехватывающие ИС называются обработчиками ИС. Программа, подготавливающая к перехвату ИС, испытывая try один или несколько операторов, кот возбуждать ИС и ИС в проге возбуждаются с помощью оператора throw обычно где-нибудь внутри ф-ции, например throw 1;
Однако более удобно воспользоваться объектом – строка,
throw “overflow”;
Где-то в другом месте прогой обработчиком строковых ИС может быть пойман и отображен ан дисплей посланный объект, в обработчике также задается тип объекта ( в данном примере const char ) в выражении catch
catch ( cont char *message) {
cout <<”Error!”<<message<<endle;
//…другие действия
}
В других действиях можно аварийно прервать выполнение проги, вызвать другую ф-ю, или продолжить цикл для повторения выполнения действий, вызвавших проблему. Обработка ИС целиком зависит от программиста.
ИС часто представляют объектами, которые очень похожи на аргументы ф-ции наиболее часто они представляют собой объекты класса .
class Overflow {};
Можно послать объект этого класса для возбуждения ИС ( предположим внутри ф-ции
throw overflow();
В этом операторе создается объект класса overflow. Где-то в другом месте проги можно перехватить ИС catch
catch (Overflow) {
cout<< “overflow detected.”<<endl;
}
Можно снабдить перехватываемый объект именем
catch Overflow ( Overflow overObject) {
//…
}
Обычно в классе ИС реализуются ф-ции-члены, которые можно вызывать в выражениях внутри catch
Пример:
class Overflow{
void Report () {
cout<<”Error overflow”<<endl; }
};
В catch можно вызвать Report для отображения о ошибке
catch ( overflow overObject) {
overObject.Report();
}