Составители:
Рубрика:
определенного типа, но можно сначала использовать класс CException, пред-
назначенный для перехвата исключений всех типов, а затем – метод COb-
ject::IsKindOf(), определяющий тип исключения (и соответствующий произ-
водный класс). Однако не следует забывать, что метод CObject::IsKindOf()
применим только к тем классам, которые были объявлены с помощью макро-
команды IMPLEMENT_DYNAMIC,
разрешающей динамическую проверку
типов. При объявлении всех классов, производных от класса CException, также
необходимо использовать эту макрокоманду.
Для получения подробной информации об исключении любого из клас-
сов, производных от CException, можно воспользоваться функциями GetEr-
rorMessage() и ReportError().
Если исключение перехвачено одной из макрокоманд, объект CException
удаляется автоматически. Если же оно перехвачено с использованием блока
catch, объект CException невозможно удалить автоматически, поэтому в про-
грамме для этого должны быть предусмотрены специальные меры.
Поскольку CException представляет собой абстрактный базовый класс, вы
не можете напрямую создавать производные от него классы – пользовательские
классы могут быть порождены только от классов, производных от
CException. Если вы хотите создать собственное исключение типа CException,
воспользуйтесь в качестве модели одним из производных классов. Кроме того,
при создании производного класса необходимо указать макрокоманду IM-
PLEMENT_DYNAMIC,
организующую поддержку динамической проверки
типов.
Наряду с тем, что вы можете явно указать производные от CException
классы в операторах catch, в качестве аргумента этого оператора можно задать
и троеточие: catch (...). При этом блок catch будет перехватывать исключения
всех типов, в том числе исключения языка С и исключения, порожденные сис-
темой и приложениями. К ним относятся также исключения, связанные с на-
рушением защиты памяти, делением на ноль, недопустимыми операциями с
плавающей запятой.
Следует обратить внимание, что подобно обработчику CException, кото-
рый должен следовать после всех подпрограмм обработки, основанных на
классах CException, оператор catch (...) всегда должен быть последним обра-
ботчиком в своем блоке try.
Глава 9. ДИНАМИЧЕСКИЙ ОБМЕН ДАННЫМИ В ОС WINDOWS
115
определенного типа, но можно сначала использовать класс CException, пред-
назначенный для перехвата исключений всех типов, а затем – метод COb-
ject::IsKindOf(), определяющий тип исключения (и соответствующий произ-
водный класс). Однако не следует забывать, что метод CObject::IsKindOf()
применим только к тем классам, которые были объявлены с помощью макро-
команды IMPLEMENT_DYNAMIC, разрешающей динамическую проверку
типов. При объявлении всех классов, производных от класса CException, также
необходимо использовать эту макрокоманду.
Для получения подробной информации об исключении любого из клас-
сов, производных от CException, можно воспользоваться функциями GetEr-
rorMessage() и ReportError().
Если исключение перехвачено одной из макрокоманд, объект CException
удаляется автоматически. Если же оно перехвачено с использованием блока
catch, объект CException невозможно удалить автоматически, поэтому в про-
грамме для этого должны быть предусмотрены специальные меры.
Поскольку CException представляет собой абстрактный базовый класс, вы
не можете напрямую создавать производные от него классы – пользовательские
классы могут быть порождены только от классов, производных от
CException. Если вы хотите создать собственное исключение типа CException,
воспользуйтесь в качестве модели одним из производных классов. Кроме того,
при создании производного класса необходимо указать макрокоманду IM-
PLEMENT_DYNAMIC, организующую поддержку динамической проверки
типов.
Наряду с тем, что вы можете явно указать производные от CException
классы в операторах catch, в качестве аргумента этого оператора можно задать
и троеточие: catch (...). При этом блок catch будет перехватывать исключения
всех типов, в том числе исключения языка С и исключения, порожденные сис-
темой и приложениями. К ним относятся также исключения, связанные с на-
рушением защиты памяти, делением на ноль, недопустимыми операциями с
плавающей запятой.
Следует обратить внимание, что подобно обработчику CException, кото-
рый должен следовать после всех подпрограмм обработки, основанных на
классах CException, оператор catch (...) всегда должен быть последним обра-
ботчиком в своем блоке try.
Глава 9. ДИНАМИЧЕСКИЙ ОБМЕН ДАННЫМИ В ОС WINDOWS
115
Страницы
- « первая
- ‹ предыдущая
- …
- 113
- 114
- 115
- 116
- 117
- …
- следующая ›
- последняя »
