602_______________________________Часть IV. Новые возможности C++
Следующий пример, листинг 22.17, демонстрирует некоторые выводы из правил 1, 4 и 5.
// Необходимые заголовки #include <iostream.h>
class Firsti { };
class First2 { };
class Last : public Firsti, public First2'( };
Last MyLast;
void Funcl(int flag) t
cout « "B Funcl.\n";
if (flag)
throw MyLast;
}
void main() f
try {
Funcl(l);
) catch (Firstis) { . .
cout « "Перехвачена исключительная ситуация Firsti.\n";
} catch (First2&) {
cout « "Перехвачена исключительная ситуация First2.\n";
} catch (...) {
cout « " Перехвачена неопознанная исключительная ситуация.\п";
)
В этом фрагменте содержится иерархия множественного наследования: класс Last наследуется как от класса Firsti, так и от First2. Когда Fund () генерирует исключительную ситуацию MyLast, программа ищет подходящий обработчик в списке, расположенном в функции main(). Первым проверяется обработчик catch (Firstl&). Генерируемая исключительная ситуация имеет тип Last; очевидно, точного соответствия между обработчиком ,и исключительной ситуацией нет, однако, так как класс Last наследуется от класса Firsti, этот обработчик по правилам 4 и 5 считается приемлемым.
Предположим, что вы переупорядочите этот перечень таким образом, что обработчик First2s расположится перед обработчиком Firstl&, как показано ниже: