600 Часть IV. Новые возможности C++
• Правило 2. Абсолютный обработчик, как было объяснено в предыдущем разделе, может обработать любую исключительную ситуацию.
• Правило 3. Исключительная ситуация может быть направлена обработчику соответствующего типа или обработчику ссылки на этот тип. Поэтому исключительные ситуации типа Mydass могут принять как catch (Mydasss), так и catch (Mydass). Можно использовать модификаторы const и volatile; они не играют роли при выборе подходящего обработчика, однако после того, как исключительная ситуация перехвачена, эти модификаторы вступают в силу.
• Компилятор Borland не позволяет указывать в списке обработчиков одновременно и обработчик некоторого типа, и обработчик ссылки на этот тип, так как первый в списке всегда победит. В разделе "Особенности генерации исключительных ситуаций" детально объясняется, почему это так.
• Правило 4. Исключительная ситуация может быть направлена обработчику базового ддя нее класса. Следовательно, если класс.в наследуется от класса А, то обработчик класса А может обработать исключительную ситуацию класса в.
• Компилятор Borland C++ 5 позволяет располагать в списке обработчик . базового типа перед обработчиком производного типа, но при этом он предупредит вас, что обработчик базового типа заслоняет собой обработчик производного типа. Не стоит игнорировать такие предупреждения, так как в этом случае обработчик базового типа всегда будет обрабатывать исключительные ситуации, предназначенные для обработчика производного типа.
• Правило 5. В соответствии с правилом 3, вы можете направить исключительную ситуацию обработчику, который может принимать ссылку на объект базового для данной исключительной ситуации класса. Таким образом, если класс в наследуется от класса А, обработчик ссылки класса А может обработать исключительную ситуацию класса в (или ссылку на класс в).
• Как и в предыдущих примерах, компилятор Borland будет предостерегать вас всякий раз, когда вы разместите обработчик ссылки на базовый класс исключительной ситуации до обработчика производного класса (или ссылки на него). Как и в правиле 4, прислушайтесь к этому предупреждению: исключительную ситуацию всегда будет обрабатывать первый обработчик в списке.
• Правило 6. Исключительную ситуацию можно направить обработчику, принимающему указатель, если к типу этого указателя можно преобразовать генерируемую исключительную ситуацию, используя стандартные правила преобразования типов для указателя.
• Правило 7. Если программа не может найти обработчик для исключительной ситуации в текущем списке обработчиков, она ищет другой