Глава 22. Обработка исключительных ситуаций_______________________603

catch (First2s) (

cout « "Перехвачена исключительная ситуация First2.\n";

} catch (Firstl&) {

cout « "Перехвачена исключительная ситуация Firstl.\n";

} catch (...) {

cout « "Перехвачена неопознанная исключительная ситуация.\n";

В этом случае в соответствии с правилом 1 исключительную ситуацию перехватывает обработчик First2&.

В заключение рассмотрим листинг 22.18, который демонстрирует, как влияет на поиск подходящего обработчика правило 6. В этой программе генерируемая исключительная ситуация имеет тип'.указателя. Согласно правилу 6, такие исключительные ситуации допускают несколько большую свободу выбора, чем обычно.

// Необходимые заголовки ttinclude <iostream.h>

class Base { ) ;

class Derived : public Base { };

void Fund(int flag) {

cout « "B Funcl.\n";

if (flag)

throw new Derived;

}

void main() (

try (

Funcl(l) ;

} \ catch (Derived*) {

cout « "Перехвачена исключительная ситуация типа Derived*.\n" } catch (Base*! {

cout « "Перехвачена исключительная ситуация типа Base*.\n";

} catch (void*) {

cout « "Перехвачена исключительная ситуация типа void*.\n";

} catch (...) {

cout « "Перехвачена неопознанная исключительная ситуация.\n";

}