|
Программирование >> Программирование на языке c++
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. Заметим, что деструкторы будут вызываться только для тех объектов, которые были сконструированы полностью; в) управление передается найденному обработчику исключения;
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |