730_____________________________________________Глава 12

сы предназначены только для построения на их основе конкретных классов — на.
следников.

12.13.6 Особенности классов, наследующих классам
библиотеки компонентов C++Builder

12.13.6.1 Свойства

О некоторых особенностях построения классов, наследующих классам библио-j
теки компонентов C++Builder, уже говорилось ранее. К этим особенностям отно-
сится невозможность для таких классов множественного наследования и необхо4
димость создавать объекты только с помощью операции new. Теперь остановимся
на других особенностях, связанных с понятиями свойства и события,        в

Понятие свойства (property), объединяет поле данных и функции (методы) егя
записи и чтения. В рассматриваемых классах сами поля объявляются как обычно,
но, как правило, в разделе private. Традиционно идентификаторы полей совпада-
ют с именами соответствующих свойств, но с добавлением в качестве префикса
символа 'F'.

Свойство объявляется оператором вида:

_property <тип> <имя> = (геас!=<имя поля или метода чтения>
ипЪе=<имя поля или метода записи>
•^директивы запоминания и значения по

умолчанию>;

Если в разделах read или write этого объявления записано имя поля, значит]
предполагается прямое чтение или запись данных.

Если в разделе read записано имя метода чтения, то чтение будет осуществля-
ться только функцией с этим именем. Функция чтения — это функция без пара-
метра, возвращающее значение того типа, который объявлен для свойства. Имя
функции чтения принято начинать с префикса Get, после которого следует имя
свойства.

Если в разделе write записано имя метода записи, то запись будет осуществля-
ться только процедурой с этим именем. Процедура записи — это процедура с од-
ним параметром того типа, который объявлен для свойства. Имя процедуры запи-
си принято начинать с префикса Set, после которого следует имя свойства.

Если раздел write отсутствует в объявлении свойства, значит это свойство то-
лько для чтения и пользователь не может задавать его значение.

Директивы запоминания определяют, как надо сохранять значения свойст5
при сохранении пользователем файла формы .dfm. Чаще всего используется дг
ректива

default <значение по умолчанию>

Она не задает начальное значение. Это дело конструктора. Директива простс
говорит, что если пользователь в процессе проектирования не изменил значение
свойства по умолчанию, то сохранять значение свойства не надо.

Приведем пример. Пусть требуется объявить класс с именем MyClass, насле-
дующий непосредственно TObject и имеющий свойство целого типа с именем А.
Тогда объявление этого класса может иметь вид:

class MyClassI : public TObject
(
private:

int FA;

protected:

void _fastcall SetA(int); // функция записи
published:

_property int A = (read = FA, write = SetA, default = true);