Классы исключений
Часто для обработки исключительных ситуаций используются классы, специально предназначенные для этой цели. Главное в управлении исключениями — отыскать нужный обработчик, а это делается путем сопоставления типа выброшенного объекта с типами, объявленными в обработчиках. Поэтому иногда для исключений определяют совершенно “пустые” классы, однако с уникальными именами.
Классы исключений программы могут быть организованы в иерархическую структуру. Схожие типы исключений объявляются в качестве производных одного и того же базового класса, являющегося их обобщением. Используя полиморфные механизмы, можно перехватывать только указатель или ссылку на базовый класс; полиморфизм обеспечит адекватную обработку исключения любого производного класса. Вот примерная схема:
class GenericFault { // Обобщенная ошибка.
public: virtual void Report ();
//
// Конкретные типы ошибок...
//
class OpenError: public GenericFault {
public:
void Report();
}
class BadHeader: public GenericFault { public:
void Report ();
class BadRecord: public GenericFault ( public:
void Report () ;
}
int main() {
try {
}
catch(GenericFault &err) { err.Report () ;
}
return 0;
}