    Inside trapper function 
    Error: count = 1

    Inside trapper function 
    Error: count = 2 

    Insade trapper function 
    Error: count = 3 

    inside trapper function 
    Error: count = 4	

    Inside trapper function 
    Error: count = 5

    Inside trapper function 
    Error: count = 6 

    Inside trapper function 
    Error: count = 7

    Inside trapper function 
    Error: count = 8 

    Inside trapper function 
    Error: count = 9 

    Inside trapper function 
    Error: count = 10 

    Inside trapper function 

    Inside terminate function 

    Exiting program with error code -1 


    Рис. 15.3. Результат работы программы UNEXPECT 


    В функции main() устанавливаются функции-обработчики, замещающие по
умолчанию   функции unexpected() и terminate(). В основной программе затем 
выполняется "бесконечный" цикл for, похожий на те, что вы уже видели раньше. 
Внутри цикла в блоке try вызывается функция Run(), и оператор catch перехватывает 
все объекты класса Error, которые посылает Run(). При возбуждении исключительной 
ситуации catch отображает текущее значение счетчика ошибок путем обращения к 
функции-члену Say() посланного объекта. 
    Функция Run() всегда возбуждает исключительную ситуацию, моделируя 
возникновение нескольких ошибок, которые может понадобиться обработать в более 
обширных программах. Пользовательский обработчик непредвиденных исключительных 
ситуаций trapperO выводит сообщение, свидетельствующее о вызове этой функции. 
Как показано на рис. 5.3, это происходит после.возбуждения 10 исключительных ситуаций. 
    Обработчик непредвиденных исключительных ситуаций может возбудить еще одну 
исключительную ситуацию для продолжения программы. В данном примере следующий 
оператор посылает новый экземпляр класса Error: 

    throw Error(); 

    Поскольку наш обработчик непредвиденных исключительных ситуаций не 
вызывается до тех пор, пока не возникнут 10 исключительных ситуаций, тем не 
менее создание объекта класса Error заставляет конструктор этого класса 
возбудить еще одну исключительную ситуацию типа MaxError (см. конструктор 
класса Error). Этот тип ошибки не поддерживается в операторе catch, поэтому 
вызывается обработчик завершения программы zapper. Функция завершения не может 
возбудить исключительную ситуацию. (Функции завершения и непредвиденных 
исключительных ситуаций также не могут выполнить оператор return).	


    414     Часть III. Программирование на ANSI C++ 
