Кент Рейсдорф. BORLAND C++BUILDER. Раздел 4

Кент Рейсдорф. BORLAND C++BUILDER. Страница 409

Большинство библиотек классов формирует экземпляр класса обработ­ки исключений. В VCL определено несколько таких классов. Существует несколько причин, по которым формируется экземпляр класса. Прежде всего, класс может содержать члены-данные и/или функции, которые опи­сывают все, что вы должны знать для обработки ошибки. Например, ба­зовый класс обработки исключений может содержать члены-данные с име­нами Error и Msg, которые содержат номер ошибки и текстовую строку, описывающую ошибку. В этом случае вы проверяете номер ошибки, чтобы правильно ее обработать, или выводите строку сообщения (или делаете все вместе).

Захват

Как я уже говорил, вероятнее всего вам придется заниматься захватом исключений VCL. Если в компоненте VCL что-то идет не так, VCL сформирует исключение. Если вы не обработаете это исключение, VCL обработает его заданным по умолчанию способом. Обычно это означает, что будет выведено окно сообщения с описанием возникшей ошибки. Захватывая эти исключения в своем коде, вы можете сами решить, как они должны быть обработаны, а не принимать заданное по умолчанию поведение.

Взгляните на листинг 14.2 еще раз. В строке 10 вы видите следующее:

catch (...)

Эта запись сообщает компилятору, что вы хотите захватывать все ис­ключения, независимо от их типа. Если в блоке try сформирован какой-либо тип исключения, будет выполнен блок catch. Это удобно, если вы не знаете, какое исключение сформирует определенный фрагмент кода, или вы хотите обрабатывать все исключения. Скорее всего, в реальности вы будете сужать диапазон захватываемых исключений.

В качестве примера снова вернемся к листингу 14.2. Код в строке 3 может сформировать исключение, если файл, который пользователь пробует открыть, не является графическим. В этом случае VCL формирует исключение EInvalidGraphic. Если говорить точнее, то VCL сгенерирует исключение и сформирует экземпляр класса EInvalidGraphic. Вы можете захватывать толь­ко этот тип исключений, а остальные исключения будут обработаны заданным по умолчанию способом:

Web-дизайн (с) 2010 All rights reserved