Обработка исключений представляет собой структурированное средство, с помощью которого программа может обрабатывать исключительные ситуации. Это означает, что обработчик ошибки должен выполнять какие-то рациональные операции в случае возникновения ошибки. В качестве примера рассмотрим следующую простую программу. Она вводит два числа и делит первое на второе. Для обработки ситуации деления на ноль используется обработка исключений.
#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() языка С.
ПАМЯТКА: Ключевым моментом обработки исключений служит упорядоченный способ обработки ошибок. Это означает урегулирование ситуации, если такое возможно. |