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

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

Все объекты VCL должны размещаться динамически

Когда вы помещаете компонент в форму, C++Builder автоматически со­здает код для его динамического размещения, поэтому вам не нужно об этом заботиться. Однако может возникнуть необходимость создавать и использо­вать классы VCL во время выполнения программы. Например, пусть вам нужно отобразить диалоговое окно открытия файла, а в форме отсутствует компонент TFileOpen. Никаких проблем — объект можно создать «на лету». Соответствующий код может выглядеть следующим образом:

TOpenDialog* dig = new TOpenDialog(this); dlg->Title = "Open a New File"; dlg->Execute ();

Обратите внимание, что объект должен создаваться с помощью оператора new. Если вы попытаетесь использовать локальное размещение, компилятор выдаст сообщение об ошибке VCL classes must be constructed using operator new (классы VCL должны создаваться с помощью оператора new).

Объектный Паскаль не поддерживает перегруженные функции;

следовательно, классы VCL не имеют перегруженных конструкторов

Фактически, конструкторы в VCL выполняют очень ограниченное число действий. Возьмем, например, VCL-версию класса TRect. Чтобы создать и инициализировать объект типа TRect в VCL, вам потребуется код наподобие следующего:

OWL также содержит класс TRect. Но в OWL вы можете инициализи­ровать члены top, left, bottom и right через конструктор:

TRect rect (20, 20, 220, 220);

Очевидно, что задание параметров прямоугольника в конструкторе со­кращает объем набираемого текста. В дополнение к этому, OWL-версия TRect содержит несколько конструкторов для создания экземпляров класса различ­ными способами. Конструкторы класса CRect в MFC в основном аналогичны конструкторам TRect в OWL. Все сказанное означает, что в некоторых слу­чаях при создании классов VCL в вашем распоряжении не будет той гибкости, которую дает Си++. Как правило, это не очень большая жертва.

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