На этом шаге мы рассмотрим использование некоторых глобальных переменных, которые можно применять при обработке исключений.
Перечислим переменные, которые можно использовать при обработке исключений:
Эти переменные определяются в файле except.h следующим образом:
extern char * __throwExceptionName ; extern char * __throwFileName; extern unsigned __throwLineNumber;
Следующая программа демонстрирует возможности применения перечисленных глобальных переменных:
//EXC13_1.СРР - Использование глобальных переменных //__throwExceptionName, __throwFileName и __throwLineNumber. #include <except.h> // Описание переменных __throwXXXX. #include <iostream.h> // Описание потоков ввода-вывода. class A // Определяем класс A { public: void print() // Функция печати сведений об исключении. { cout << "Обнаружено исключение "; cout << __throwExceptionName; cout <<" в строке " << __throwLineNumber; cout <<" файла '" << __throwFileName << "' "; cout <<endl; } }; class B: public A {}; // Класс В порождается из A. class C: public A {}; // Класс C порождается из A. C _c; // Создан объект класса C. void f() // Функция может порождать любые исключения. { try { // Формируем исключение (объект класса C): throw(_c); } catch (B X) // Здесь обрабатываются исключения типа B. { X.print(); } } void main () { try { f(); } // Контролируемый блок. // Обрабатываются исключения типа A // (и порожденных от него): catch (A X) { X.print(); }; // Обнаружено исключение. }
Результат выполнения программы:
Обнаружено исключение С в строке 24 файла 'EXC13_1.СРР'
Комментарии в тексте программы достаточно подробно описывают ее особенности. В выводимом на экран результате используются значения глобальных переменных.
Рис.1. Установка параметра
Назначение других опций описано на шаге 17.
На следующем шаге мы рассмотрим использование конструкторов и деструкторов в исключениях.