Кент Рейсдорф. 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 в вашем распоряжении не будет той гибкости, которую дает Си++. Как правило, это не очень большая жертва.