600 Часть IV. Новые возможности C++

Правило 2. Абсолютный обработчик, как было объяснено в предыдущем разделе, может обработать любую исключительную ситуацию.

Правило 3. Исключительная ситуация может быть направлена обработчику соответствующего типа или обработчику ссылки на этот тип. Поэтому исключительные ситуации типа Mydass могут принять как catch (Mydasss), так и catch (Mydass). Можно использовать модификаторы const и volatile; они не играют роли при выборе подходящего обработчика, однако после того, как исключительная ситуация перехвачена, эти модификаторы вступают в силу.

• Компилятор Borland не позволяет указывать в списке обработчиков одновременно и обработчик некоторого типа, и обработчик ссылки на этот тип, так как первый в списке всегда победит. В разделе "Особенности генерации исключительных ситуаций" детально объясняется, почему это так.

Правило 4. Исключительная ситуация может быть направлена обработчику базового ддя нее класса. Следовательно, если класс.в наследуется от класса А, то обработчик класса А может обработать исключительную ситуацию класса в.

• Компилятор Borland C++ 5 позволяет располагать в списке обработчик . базового типа перед обработчиком производного типа, но при этом он предупредит вас, что обработчик базового типа заслоняет собой обработчик производного типа. Не стоит игнорировать такие предупреждения, так как в этом случае обработчик базового типа всегда будет обрабатывать исключительные ситуации, предназначенные для обработчика производного типа.

Правило 5. В соответствии с правилом 3, вы можете направить исключительную ситуацию обработчику, который может принимать ссылку на объект базового для данной исключительной ситуации класса. Таким образом, если класс в наследуется от класса А, обработчик ссылки класса А может обработать исключительную ситуацию класса в (или ссылку на класс в).

• Как и в предыдущих примерах, компилятор Borland будет предостерегать вас всякий раз, когда вы разместите обработчик ссылки на базовый класс исключительной ситуации до обработчика производного класса (или ссылки на него). Как и в правиле 4, прислушайтесь к этому предупреждению: исключительную ситуацию всегда будет обрабатывать первый обработчик в списке.

Правило 6. Исключительную ситуацию можно направить обработчику, принимающему указатель, если к типу этого указателя можно преобразовать генерируемую исключительную ситуацию, используя стандартные правила преобразования типов для указателя.

Правило 7. Если программа не может найти обработчик для исключительной ситуации в текущем списке обработчиков, она ищет другой