Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lectures_2.doc
Скачиваний:
28
Добавлен:
15.03.2015
Размер:
511.49 Кб
Скачать

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

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

  1. Отсутствие структурированности. Код обработки ошибок не отделен от кода нормальной работы программы.

  2. Возможность игнорирования кода ошибок.

  3. Сложность обработки ошибок, возникающие при разработке библиотек. Разработчик библиотеки часто не в курсе как обрабатывать ошибки.

. Аппарат исключительных ситуаций предназначен для преодоления недостатков, присущих классическим методам обработки ошибок. Его преимущества состоят в следующем:

  • Код нормальной работы программы и код обработки ошибок структурно отделены.

  • Выброс исключения игнорировать нельзя. Отсутствие обработчика приводит к завершению работы программы.

Завершение или продолжение

В теории обработки исключений имеются две модели:

  • обработка с завершением работы программы.

  • обработка с продолжением работы программы.

В модели с завершением выполнения программы предполагается, что ошибка настолько серьезна, что возобновлять ее выполнение с точки возникновения ошибки нельзя. Необходимо позаботиться о корректном завершении программы. Например, сохранить не записанные на диск данные. Эта модель и принята в языке C++.

Распределение обязанностей между разработчиком и клиентом

Разработчик должен обеспечить:

  • выброс исключения при возникновении исключительной ситуации в разработанной им функции.

  • уведомить клиента о том, какие исключения может «выбросить» его функция.

Клиент должен предусмотреть обработчики исключений, которые могут выбросить используемые им функции.

Генерация исключений

Генерация исключения выполняется с помощью инструкции throw. Имеются два формата этой инструкции.

Первый формат:

throw<α>, гдеthrow– зарезервированное слово;

α - выражение.

Второй формат:

throw

Основным является первый формат. Второй формат применяется для так называемого повторного выброса исключений.

Назначение первого формата инструкции throwсостоит в создании объекта исключения. Основная информация для обработчика исключительной ситуации состоит в типе выброшенного объекта.

Объект исключения может иметь любой тип:

  • встроенный.

  • пользовательский.

Предпочтительней выбрасывать объекты пользовательского типа. Стандартным является использование анонимного объекта пользовательского типа. Предпочтительнее использовать либо один из классов стандартной библиотеки C++, предназначенных для работы с исключениями, либо порождать от этих классов собственный класс. Не рекомендуется использовать в инструкцииthrowстроковые литералы. Это усложняет реализацию обработчика.

Примеры хороших и плохих решений.

Хорошие решения:

  • throw std :: invalid_argumtnt(“Invalid _ argument in my_sqrt\n”); // используется библиотечный класс

  • throw Bad_index();// используется пользовательский // класс

Плохие решения (используются строковые литералы):

  • throw “Bad index\n”;

  • throw “Invalid argument\n”;

  • throw “Foo\n”;

  • throw “Help\n”;

Соседние файлы в предмете Программирование