Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Универсальный обработчик исключенийСодержание книги
Поиск на нашем сайте
В одном блоке try можно вызывать исключения разных типов. В этом случае после блока try должны следовать обработчики для исключений каждого типа. Вы можете определить обработчик, обслуживающий исключения всех типов. Для этого вместо типа в операторе catch надо указать три точки: catch(...) { ... } Исключения в языке Си++ могут быть различного типа, в том числе они могут быть объектами классов. Вы можете определить несколько обработчиков исключений различного типа. В этом случае исключение будет обрабатывать обработчик соответствующего типа. Если вызывается исключение, для которого отсутствует обработчик и не определен универсальный обработчик исключений всех типов, тогда вызывается функция terminate из стандартной библиотеки. Она вызывает функцию abort, завершающую работу программы. Вы можете определить собственную функцию, которая будет вызываться перед аварийным завершением программы. Для этого вы должны вызвать функцию set_terminate, указав ей в качестве параметра имя вашей функции. Если вы воспользуетесь функцией set_terminate несколько раз, то будет вызываться только функция, указанная в последнем вызове set_terminate. #include <eh.h> #include <iostream.h> #include <process.h>
void FastExit(void);
int main() { // Устанавливаем функцию term_func set_terminate(FastExit);
try { //...
// Вызываем исключение типа int throw (int) 323;
//... }
// Определяем обработчик типа char. Обработчик исключений // типа int и универсальный обработчик не определены catch(char) { cout << "Exception " << endl; } return 0; }
// Определение функции FastExit void FastExit() { cout << "Exception handler not found" << endl; exit(-1); } Среда Visual C++ позволяет запретить или разрешить обработку исключений языка Си++. Для управления исключениями выберите из меню Build строку Settings. На экране появится диалоговая панель Project Settings, в которой определяются все режимы работы. Выберите страницу C/C++. Затем из списка Category выберите строку C++ Language. Чтобы включить обработку исключительных ситуаций установите переключатель Enable exception handling.
Иерархии исключений Использование собственных классов исключений предпочтительнее применения стандартных типов данных. С помощью классов можно более гибко организовать передачу информации об исключении, легче дифференцировать обработку исключений и, кроме того, появляется возможность использовать иерархии классов-исключений. Производя классы-исключения от общего базового класса, можно в обработчике перехватывать ссылку или указатель на базовый класс, используя полиморфизм. Например, в математической библиотеке классы-исключения можно организовать следующим образом: class Matherr; class Overflow: public Matherr; // переполнение class Underflow: public Matherr; // исчезновение порядка class ZeroDivide: public Matherr; // деление на ноль В зависимости от обстоятельств можно использовать либо обработчик исключения базового класса, который будет перехватывать и производные исключения, либо собственные обработчики производных классов. Существует ряд стандартных исключение, которые генерируются операциями или функциями С++. Все они являются производными от библиотечного класса exception, описанного в заголовочном файле <stdexcept>. Например операция new при неудачном выделении памяти генерирует исключение типа bad_alloc. Определенные в языке C++ стандартные исключения, вызываемые логическими ошибками, выведены из базового класса logic_error. Они приведены в таблице 31.1.
Таблица 31.1 - Стандартные исключения, вызываемые логическими ошибками
Динамические исключения выведены из базового класса runtime error. Они приведены в таблице 31.2
Таблица 31.2 – Динамические исключения
Контрольные вопросы: 1. Что такое исключение и исключительная ситуация? 2. Как организуется обработка исключительных ситуаций? 3. Какие возможны исключительные ситуации при работе программ?
|
||||||||||||||||||||
Последнее изменение этой страницы: 2021-02-07; просмотров: 224; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.138.137.244 (0.006 с.) |