Программирование на C и C++

Онлайн справочник программиста на C и C++

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

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

#include <iostream.h>
void divide(double a, double b);
int main()
{
double i, j;
do {
cout << "Enter numerator (0 to stop): ";
cin >> i;
cout << "Enter denominator: ";
cin >> j;
divide(i, j);
} while(i != 0);
return 0;
}
void divide(double a, double b)
{
try {
if(!b) throw b; // проверка на деление на ноль
cout << "Result: " << a/b << endl;
}
catch (double b) {
cout << "Can't divide by zero.\n";
}
}

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

Обработка исключений особенно полезна при выходе из последовательности глубоко вложен­ных процедур при возникновении фатальной ошибки. В этом отношении обработка исключений С++ призвана заменить функции setjmp() и longjmp() языка С.

ПАМЯТКА: Ключевым моментом обработки исключений служит упорядоченный способ обработки ошибок. Это означает урегулирование ситуации, если такое возможно.