Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT | страница 25



> long res = 0;


> // Введите число num

> cout << "Input number: ";

> cin >> num;


> // Блок try, из которого можно вызвать исключение

> try {

> if ((num == 7) || (num == 0))


>   // Если переменная num содержит значение 0 или 7,

>   // тогда вызываем исключение типа float

>   throw num;


>  // Значения num равные 0 или 7 вызовут ошибку

>  // деления на нуль в следующем выражении

>  res = 100 / (num * (num – 7));


>  // Отображаем на экране результат вычисления

>  cout << "Result = " << res << endl;

> }


> // Обработчик исключения типа float

> catch(long num) {

>  // Отображаем на экране значение переменной num

>  cout << "Exception, num = " << num << endl;

> }


> cout << "Stop program" << endl;

> return 0;

>}

В определении обработчика сообщения можно не указывать имя переменной и ограничиться только названием типа. Так, обработчик в предыдущем примере может выглядеть следующим образом:

>catch(long) {

> // Отображаем на экране значение переменной num

> cout << "Exception, num = " << num << endl;

>}

Универсальный обработчик исключений

В одном блоке try можно вызывать исключения разных типов. В этом случае после блока try должны следовать обработчики для исключений каждого типа. Вы можете определить обработчик, обслуживающий исключения всех типов. Для этого вместо типа в операторе catch надо указать три точки:

>catch(…) {

> …

>}

Исключения в языке Си++ могут быть различного типа, в том числе они могут быть объектами классов. Вы можете определить несколько обработчиков исключений различного типа. В этом случае исключение будет обрабатывать обработчик соответствующего типа.

Тип исключения

Если вызывается исключение, для которого отсутствует обработчик и не определен универсальный обработчик исключений всех типов, тогда вызывается функция terminate из стандартной библиотеки. Она вызывает функцию abort, завершающую работу программы.

Вы можете определить собственную функцию, которая будет вызываться перед аварийным завершением программы. Для этого вы должны вызвать функцию set_terminate, указав ей в качестве параметра имя вашей функции. Если вы воспользуетесь функцией set_terminate несколько раз, то будет вызываться только функция, указанная в последнем вызове set_terminate.

>#include

>#include

>#include


>void FastExit(void);


>int main() {

> // Устанавливаем функцию term_func

> set_terminate(FastExit);


> try {

>  // …


>  // Вызываем исключение типа int

>  throw (int) 323;


>  // …

> }


> // Определяем обработчик типа char. Обработчик исключений