Обработка исключений
Исключения
Синтаксис исключений
Исключения: пример
Исключения
Исключения
Исключения
Исключения
Исключения
56.82K
Категория: ПрограммированиеПрограммирование

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

1.

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

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

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

3. Исключения

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

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

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

catch (типN аргумент) {
//
}

5.

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

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

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

7. Исключения

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

8. Исключения

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

9. Исключения


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

10. Исключения

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

11. Исключения

try {
// code to try
}
catch (exceptionType1 &name1) {
// handle exceptions of exceptionType1
}
catch (exceptionType 2&name2) {
// handle exceptions of exceptionType2
}
catch (exceptionType3 &name3) {
// handle exceptions of exceptionType3
}
...
Сработает только
/* далее код*/
первый по порядку!
(не switch)
English     Русский Правила