Программирование >>  Программирование на языке c++ 

1 ... 97 98 99 [ 100 ] 101 102 103 ... 159


void f(void) { string str(ss); int index;

try { cout \nEnter index: ; cin index; cout str[index];

catch(string::range) { cout wrong index\n ;

f();}

void my unexp(void) описание новой функции unexpected { cout my unexp\n ; exit(1); }

void my term(void) описание новой функции terminate { cout my term\n ; abort(); } void main(void)

{ set unexpected(my unexp); регистрация новой функции

unexpected set terminate(my term); регистрация новой функции

terminate

f(); }

Все необходимые пояснения этой программы были даны выше (см. также § 7.6).

Последняя программа еще раз показывает переопределение пользователем функций unexpected и terminate. #include <except.h> #include <iostream.h> #include <stdlib.h> #define ss 10

void f(void) throw(int) здесь указано, что функция f гене-{ int а; рирует только исключения типа int

cout Enter a:\n ;

cin a;

if {a==1) throw 0; передача управления блоку catch(int) if (a==2) throw; вызов функции my term if (a==3) throw 0 ; поскольку генерируется исключе- ние типа char, то вызывается функция my unexp



cout а = а endl;

void my unexp(void) { cout my unexp\n ; exit(1); } void my term(void) { cout my term\n ; abort{); } void main(void) { set unexpected(my unexp); set terminate(my term);

try { fO; }

catch(int) { cout << catch block\n ; }

Ниже показаны возможные результаты работы программы (строки, помеченные <Enter>, должны быть введены с клавиатуры).

0<Enter> а = 0 1<Enter> catch block 2<Enter> my term 3<Enter> my unexp

7.9. Заключение

Сформулируем основные выводы и правила использования механизма обработки исключений:

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

при прерывании программы (см. п. 1) управление и, возможно, данные передаются из точки прерывания в опре-



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

4- рассматриваемый механизм обеспечивает обработку только синхронных исключений. Это означает, что они могут быть сгенерированы только в самой программе. Например, прерывание программы со стороны пользователя (нажатие клавиш Ctrl-C) нельзя рассматривать как исключение;

4- для поддержки механизма обработки исключений в язык C+-I- введены три ключевых слова: throw, try и catch;

4- блок кода, в котором может возникнуть исключение, должен следовать после ключевого слова try и должен быть заключен в фигурные скобки: try {...}. После блока try должен идти как минимум один блок, начинающийся ключевым словом catch, заключенный в фигурные скобки: catch { ... } и называемый обработчиком исключения. Разрешается задавать несколько обработчиков исключения, следуемых друг за другом после блока try;

исключения в языке C+-I- могут быть любого типа. Однако наиболее часто используются исключения типа class или struct;

4- в программе возникает исключение, когда управление передается инструкции throw .... В этом случае выполняются следующие действия:

а) осуществляется поиск соответствующего обработчика исключений (т. е. первого обработчика catch, аргумент которого соответствует аргументу throw);

б) если обработчик найден, то выполняется процесс, называемый stack unwinding . Это означает, что вызываются деструкторы для всех автоматических объектов, сконструированных с начала выполнения соответствующего блока try. Заметим, что деструкторы будут вызываться только для тех объектов, которые были сконструированы полностью;

в) управление передается найденному обработчику исключения;



1 ... 97 98 99 [ 100 ] 101 102 103 ... 159

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика