Язык программирования C++. Вводный курс



         

Перехват всех исключений - часть 2


Предложение catch(...) используется самостоятельно или в сочетании с другими catch-обработчиками. В последнем случае следует позаботиться о правильной организации обработчиков, ассоциированных с try-блоком.

Catch-обработчики исследуются по очереди, в том порядке, в котором они записаны. Как только найден подходящий, просмотр прекращается. Следовательно, если предложение catch(...)

употребляется вместе с другими catch-обработчиками, то оно должно быть последним в списке, иначе компилятор выдаст сообщение об ошибке:

try {

   stack.display();

   for ( int ix = 1; ix < 51; ++x )

   {

      // то же, что и выше

   }

}

catch ( pushOnFull ) { }

catch ( popOnEmpty ) { }

catch ( ... ) { }   // должно быть последним в списке catch-обработчиков

Упражнение 11.4

Объясните, почему модель обработки исключений в C++ называется невозвратной.

Упражнение 11.5

Даны следующие объявления исключений. Напишите выражения throw, создающие объект-исключение, который может быть перехвачен указанными обработчиками:

(a) class exceptionType { };

    catch( exceptionType *pet ) { }

(b) catch(...) { }

(c) enum mathErr { overflow, underflow, zeroDivide };

    catch( mathErr &ref ) { }

(d) typedef int EXCPTYPE;

    catch( EXCPTYPE ) { }

Упражнение 11.6

Объясните, что происходит во время раскрутки стека.

Упражнение 11.7

Назовите две причины, по которым объявление исключения в предложении catch следует делать ссылкой.

Упражнение 11.8

На основе кода, написанного вами в упражнении 11.3, модифицируйте класс созданного исключения: неправильный индекс, использованный в операторе operator[](), должен сохраняться в объекте-исключении и затем выводиться catch-обработчиком. Измените программу так, чтобы operator[]() возбуждал при ее выполнении исключение.




Содержание  Назад  Вперед