Исключения. Методы обработки исключений

Содержание

Слайд 2

Исключение Исключение – это непредвиденное событие, делающее невозможным дальнейшее выполнение программы по базовому алгоритму.

Исключение
Исключение – это непредвиденное событие, делающее невозможным дальнейшее выполнение программы по

базовому алгоритму.
Слайд 3

Виды исключений Синхронные исключения – такие исключения могут возникнуть только в

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

точках программы.
Асинхронные исключения – могут возникать в любой момент и независимо от того, что выполняет программа.
Слайд 4

Обработка исключений Обнаружение исключения Передача управления обработчику исключений Выполнение обработчика Обработчик

Обработка исключений
Обнаружение исключения
Передача управления обработчику исключений
Выполнение обработчика
Обработчик исключений – это блок

кода, которому передается управление при возникновении исключения.
Слайд 5

Виды обработки исключений Обработка с возвратом – обработчик ликвидирует возникшее исключение

Виды обработки исключений
Обработка с возвратом – обработчик ликвидирует возникшее исключение и

передает управление в ту точку программы, где возникло исключение
Обработка без возврата – после выполнения кода обработчика, управление возвращается в заранее заданное место программы.
Слайд 6

Целесообразность обработки исключений Исключения стоит использовать в следующих случаях: Заранее известно,

Целесообразность обработки исключений

Исключения стоит использовать в следующих случаях:
Заранее известно, что невозможно

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

Механизм обработки исключений в C++ try // контролируемый блок { //исключение

Механизм обработки исключений в C++

try // контролируемый блок
{
//исключение
throw()//генерация объекта или передача

значения
}
catch()
{//обработка исключения или вывод сообщения об ошибке
}
Слайд 8

Контролируемый блок try Блок try используется для проверки возникновения исключения, соответственно

Контролируемый блок try

Блок try используется для проверки возникновения исключения, соответственно в

блок try помещается та часть кода, в которой возможно возникновение исключения.
Свойства блока try
Связан с одним или несколькими операторами catch
Все переменные объявленные внутри try являются локальными
Слайд 9

Оператор throw Оператор throw - передает заданный объект в один из

Оператор throw
Оператор throw - передает заданный объект в один из операторов

catch.
Форма записи:
throw(объект); или throw объект; , где объектом может быть
Константа
Переменная
Выражение
Тип объекта может быть как встроенным, так и определяемым пользователем.
Слайд 10

Оператор catch Оператор сatch – принимает объект, переданный оператором throw, и

Оператор catch

Оператор сatch – принимает объект, переданный оператором throw, и после

передачи объекта выполняется код написанный в данном операторе.
Форма записи:
сatch(<тип> <имя объекта>) catch (int i)
catch(<тип объекта>) catch (int)
catch(…)
Для всех возможных типов объектов, которые может передать throw, должны существовать операторы catch, иначе компилятор выдаст ошибку “Необработанное исключение”.
Слайд 11

сatch( ) – при такой форме записи оператор принимает сам объект,

сatch(<тип> <имя объекта>) – при такой форме записи оператор принимает сам

объект, и переданный объект может использоваться в самом блоке catch. Принять можно по ссылке, копию объекта или указатель на объект.
catch(<тип объекта>) - при такой форме записи оператор не принимает сам объект, соответственно переданный объект не получится использовать в блоке catch.
catch (...) - при такой форме записи оператор принимает любые объекты, передаваемые оператором throw.
Слайд 12

Слайд 13

Порядок catch операторов имеет значение, при данной расстановке операторов, появится ошибка “маскирование обработчика”.


Порядок catch операторов имеет значение, при данной расстановке операторов, появится ошибка

“маскирование обработчика”.
Слайд 14

Обработка исключений с помощью функций

Обработка исключений с помощью функций

Слайд 15


Слайд 16

Обработка исключений с помощью функций Если не найдено соответствующего оператора для

Обработка исключений с помощью функций

Если не найдено соответствующего оператора для генерируемого

функцией исключения, то компилятор вызывает функцию unexpected(), которая вызывает функцию terminate(), завершающую программу. Обе функции можно подменить своими реализациями, для этого
Подключить #include
Определить собственную функцию с прототипом void F()
Для подмены terminate(), написать set_terminate(F), такая функция не должна возвращать исключения или управление оператором return. Она может только завершить программу функцией exit(int) или abort()
Для подмены unexpected(), set_unexpected(F).
Слайд 17

Реализация собственной иерархии исключений Определяем базовый класс:

Реализация собственной иерархии исключений

Определяем базовый класс:

Слайд 18

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


2. Определяем производные классы, которые будут содержать в себе описание конкретного

исключения.
Слайд 19

Иин ииииииррррррппппппппп

Иин ииииииррррррппппппппп

Слайд 20

Иин ииииииррррррппппппппп

Иин ииииииррррррппппппппп

Слайд 21

Иин ииииииррррррппппппппп

Иин ииииииррррррппппппппп

Слайд 22

Разбор 15 варианта лабораторной работы Определяем базовый класс:

Разбор 15 варианта лабораторной работы

Определяем базовый класс:

Слайд 23

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


2. Определяем производные классы, которые будут содержать в себе описание конкретного

исключения.
Слайд 24

3. Добавляем throw в соотвествующие методы.


3. Добавляем throw в соотвествующие методы.

Слайд 25

4. Помещаем код в блок try.


4. Помещаем код в блок try.