Глава 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";
}