Исключения для АСУб и ЭВМб. Тема 2-5

Содержание

Слайд 2

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

Обработка исключений

Иногда при выполнении программы возникают ошибки, которые трудно предусмотреть или

предвидеть.
Такие ситуации называются исключениями. Язык C++ предоставляет разработчикам возможности для обработки таких ситуаций.
Для этого в C++ предназначена конструкция try...catch...finally.
Слайд 3

Исключения Это ошибки, возникающие во время работы программы Они могут быть

Исключения

Это ошибки, возникающие во время работы программы
Они могут быть вызваны различными

обстоятельствами:
выход за пределы памяти
ошибка открытия файла
попытка инициализировать объект недопустимым значением
использование индекса, выходящего за пределы вектора
Слайд 4

Синтаксис исключений Механизм обработки исключительных ситуаций основан на трех ключевых словах:

Синтаксис исключений

Механизм обработки исключительных ситуаций основан на трех ключевых словах: try,

catch, throw
try {
// код, подлежащий контролю
// функции могут генерировать исключительные ситуации
// может содержать несколько оператор или целую программу
}
catch (тип1 аргумент) {
// перехват исключительных ситуаций
}
catch (тип2 аргумент) {
//
}

catch (типN аргумент) {
//
}
Слайд 5

throw исключительная ситуация; Оператор throw генерирует указанную исключительную ситуацию. Если в

throw исключительная ситуация;
Оператор throw генерирует указанную исключительную ситуацию. Если в программе

есть ее перехват, оператор throw должен выполняться либо внутри блока try, либо внутри функции, явно или неявно вызываемой внутри блока try
Если генерируется исключительная ситуация, для которой НЕ ПРЕДУСМОТРЕНА ОБРАБОТКА, программа может прекратить свое выполнение. В этом случае вызывается стандартная функция terminate(), которая по умолчанию вызывает функцию abort()
Слайд 6

Исключения: пример setlocale(LC_ALL, "Russian"); cout try { cout throw 100; //

Исключения: пример

setlocale(LC_ALL, "Russian");
cout << "начало \n";
try {
cout << "внутри блока try

\n";
throw 100; // генерируем ошибку
cout << "этот оператор не выполняется";
}
catch (int i) { // перехват ошибки
cout << "перехват исключительной ситуации – значение равно : ";
cout << i << "\n";
}
cout << "конец";
Слайд 7

Исключения Код, который потенциально может сгенерировать исключение помещается в блок try.

Исключения

Код, который потенциально может сгенерировать исключение помещается в блок try.
Если ошибка

исправлена, то выполнение программы возобновляется с оператора, следующего за блоком catch.
Если исправить ошибку невозможно, то в блок catch можно вызвать функции exit() или abort(), прекращает выполнение программы
Код блока catch выполняется только при перехвате исключительной ситуации
Исключительная ситуация может иметь любой тип, в том числе быть объектом класса, определенного пользователем
Если необходимо обрабатывать не отдельные типы исключительных ситуаций, а перехватывать все подряд, то применяется следующий вид оператора catch:
catch (…)
Слайд 8

Исключения Все исключения в языке C++ описываются типом exception, который определен

Исключения

Все исключения в языке C++ описываются типом exception, который определен в заголовочном

файле 
Если мы хотим отловить исключения типа exception, то нам надо в выражении catch определить переменную этого типа
catch (std::exception err)
Все типы исключений имеют метод what(), который возвращает информацию об ошибке
Слайд 9

Исключения runtime_error: общий тип исключений, которые возникают во время выполнения range_error:

Исключения

runtime_error: общий тип исключений, которые возникают во время выполнения
range_error: исключение, которое

возникает, когда полученный результат превосходит допустимый диапазон
overflow_error: исключение, которое возникает, если полученный результат превышает допустимый диапазон
underflow_error: исключение, которое возникает, если полученный в вычислениях результат имеет недопустимые отрицательное значение (выход за нижнюю допустимую границу значений)
logic_error: исключение, которое возникает при наличии логических ошибок к коде программы
domain_error: исключение, которое возникает, если для некоторого значения, передаваемого в функцию, не определено результата
invalid_argument: исключение, которое возникает при передаче в функцию некорректного аргумента
length_error: исключение, которое возникает при попытке создать объект большего размера, чем допустим для данного типа
out_of_range: исключение, которое возникает при попытке доступа к элементам вне допустимого диапазона
Слайд 10

Исключения Конструкция try...catch может использовать несколько блоков catch для обработки различных

Исключения

Конструкция try...catch может использовать несколько блоков catch для обработки различных типов

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