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

Обработка ошибок в С++ включает следующие компоненты:

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

//деление двух чисел
#include <iostream>
#include <stdexcept>

using namespace std;

int main() {
 setlocale(LC_ALL, "Russian");
 cout << "Введите 2 числа:" << endl;
 double v1 = 0, v2 = 0, result = 0;
 cin >> v1 >> v2;
 if (v2 == 0) 
 throw runtime_error("На ноль делить нельзя!");
 else {
 result = v1 / v2;
 cout << v1 << " / " << v2 << " = " << result << endl;
 }
 return 0;
}

Но передать исключение недостаточно, необходимо организовать обработку. Для этого используют конструкцию try catch.

Блок try является частью обработки исключений. Состоит из ключевого слова try и завершается одной или несколькими директивами catch.

Синтаксис:

try {
 операторы_программы
} catch(объявление_исключения) {
 операторы_обработчика
} catch(объявление_исключения) {
 операторы_обработчика
} // ...
 

Исключения, переданные из кода в блоке try, обрабатываются в одном из разделов catch.

Исключения содержатся в заголовке stdexcept. В таблице приведены стандартные классы исключений:

Исключение Объяснение
exception Наиболее общий вид проблемы
runtime_error Проблема, которая может быть обнаружена только во время выполнения
range_error Ошибка времени выполнения: полученный результат превосходит допустимый диапазон значений
overflow_error Ошибка времени выполнения: переполнение регистра при выполнении
underflow_error Ошибка времени выполнения: недополнение регистра при выполнении
logic_error Ошибка в логике программы
domain_error Логическая ошибка: аргумент, для которого не существует результата
invalid_argument Логическая ошибка: неподходящий аргумент
length_error Логическая ошибка: попытка создать объект большего размера, чем максимально допустимый для данного типа
out_of_range Логическая ошибка: используемое значение вне допустимого диапазона

В классах исключений определена только одна функция what(), не получающая никаких аргументов.

Перепишем предыдущую программу с использованием try catch:

//деление двух чисел
#include <iostream>
#include <stdexcept>

using namespace std;

int main() {
 setlocale(LC_ALL, "Russian");
 cout << "Введите 2 числа:" << endl;
 double v1 = 0, v2 = 0, result = 0;
 try {
 cin >> v1 >> v2;
 if (!v2) throw runtime_error("На ноль делить нельзя!");
 result = v1 / v2;
 cout << v1 << " / " << v2 << " = " << result << endl;
 } catch (runtime_error err) {
 cout << err.what() << endl; 
 }
 return 0;
} 


 Похожие публикации
2016-02-13 • Просмотров [ 400 ]