Основы программирования в Win32API. Марапулец Ю.В. - 115 стр.

UptoLike

Составители: 

определенного типа, но можно сначала использовать класс 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