Microsoft Visual C++ и MFC. Программирование для Win95 и WinNT


Операторы try, throw и catch


Оператор try открывает блок кода, в котором может произойти ошибка. Если ошибка произошла, то оператор throw вызывает исключение. Исключение обрабатывается специальным обработчиком исключений. Обработчик исключения представляет собой блок кода, который начинается оператором catch.

Допустим ваше приложение должно вычислять значение выражения res = 100 / (num * (num - 7)). Если вы зададите значение переменной num, равное 0 или 7, то произойдет ошибка деления на нуль. Участок программы, в котором может случиться ошибка, объединим в блок оператора try. Вставим перед вычислением выражения проверку переменной nem на равенство нулю и семи. Если переменная num примет запрещенные значения, вызовем исключение, воспользовавшись оператором throw.

Сразу после блока try поместите обработчик исключения catch. Он будет вызываться в случае ошибки.

Пример такой программы, получившей название Exception, мы привели в листинге 1.1. Программа Exception принимает от пользователя значение переменной num, а затем вычисляет выражение res = 100 / (num * (num - 7)) и отображает полученный результат на экране.

В случае, если пользователь введет число 0 или 7, тогда вызывается исключение throw. В качестве параметра оператору throw указывается переменная num. Заметим, что так как переменная num имеет тип long, считается что данное исключение также будет иметь тип long.

После вызова оператора throw управление сразу передается обработчику исключения соответствующего типа. Определенный нами обработчик отображает на экране строку "Exception, num = ", а затем выводит значение переменной num.

После обработки исключения, управление не возвращается в блок try, а передается оператору, следующему после блока catch данного обработчика исключения. Программа выведет на экран строку “Stop program” и завершит свою работу.

Если пользователь введет разрешенные значения для переменной num, тогда исключение не вызывается. Программа вычислит значение res и отобразит его на экране. В этом случае обработчик исключения не выполнится и управление перейдет на оператор, следующий за блоком обработки  исключения. Программа выведет на экран строку “Stop program” и завершит работу.


Листинг 1.1. Файл Exception.cpp

#include <iostream.h>

int main()

{



      long      num = 7;

      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;

}


Содержание раздела