Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КПИЯП_ОТВЕТЫ_2.rtf
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
238 Кб
Скачать
☆

Int getx() {return X;}

};

2.17

Исключительные ситуации.

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

Особенности:

  • автоматический вызов процедур обработки ошибок

  • польза при выходе из глубоко вложенных функций при возникновении ощибок

  • упрощает процесс создания программ

try

{

// контролируемый код

}

catch( тип1 аргумент )

{

// код обработки

}

catch( тип2 аргумент )

{

// код обработки

}

...

Оператор throw.

Предназначен для явной генерации исключительной ситуации.

throw аргумент;

Особенности:

  • генерирует исключительную ситуацию с типом,соответствующим типу аргумента

  • значение аргумента throw передается аргументу оператора catch соответствующего типа

2.18

Блок try.

Код, подлежащий контролю, должен выполнятся внутри блока try.

Особенности:

  • число операторов внутри блока значения не имеет

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

  • если есть подходящий для обработки исключения catch, то программа переходит к его выполнению

  • если отсутствует подходящий оператор catch, то при этом автоматически вызывается функция terminate() или abort().

2.19

Оператор catch.

Содержит код обработки исключительной ситуации.

Особенности:

  • получает управление только при возникновении исключительной ситуации в расположенном выше блоке try

  • если ошибку исправить невозможно, то необходимо в catch явно прервать программу или сгенерировать новую исключительную ситуацию

  • если обработка не требует завершения программы, то после блока catch програма продолжит выполнение со следующего после него оператора

  • оператор catch начинает выполняться только если тип его аргумента совпадает с типом исключительной ситуации

  • при перехвате исключительных ситуаций аргументу catch присваивается некоторое значение ( аргумент может быть объектом встроенного типа или класса )

2.20

Перехват исключений базового и производного классов.

  • оператор catch, перехватывающий исключения типа базового класса, также перехватывает исключения всех производных типов этого класса

  • для перехвата исключения только ПРОИЗВОДНОГО класса в последоавтельности операторов catch тип базового класса должен стоять позже типа производного

  • компилятор может дать предупреждение, если обработчик базового класса расположен раньше производного

2.21

Перехват всех исключительных ситуаций происходит с помощью оператора

catch ( ... ) { /* ... */ }

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

  • ставится последним в цепочке операторов для упрощения цепочки перехвата и исключения неконтролируемого аварийного завершения программы

2.22

Перехват классов исключительных ситуаций.

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

Особенности:

  • классы позволяют более полно описать возникшую ошибку

  • инкапсулирование информации об ошибке в таком классе позволяет пояснить ошибку пользователю или даже ее исправить

  • можно использовать стандартный класс и функции, определенные в <exception>

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

Можно ограничить виды типовисключительных ситуаций, которые может генерировать функция в программе:

тип имя_функции (аргументы) throw (список_типов)

{

// ...

}

Особенности:

  • функция может генерировать только исключительные ситуации типов, перечисленных в списке

  • при генерации исключительной ситуации другого типа выполняется аварийное завершение программы ( unexpected() )

  • можно задать пустой список типов

2.23

Функция terminate ()

void terminate();

Особенности:

  • вызывается автоматически, если не обнаружен подходящий оператор catch

  • является последним средством обработки исключительных ситуации

  • по умолчанию вызывает функцию abort ()

  • можно изменить обработчик функции используя

terminate_handler set_terminate ( terminate_handler new handler) throw ()

однако он должен заканчиваться функцией abort()

#include <exception>