Объект

Объекты как представители класса объявляются в программе в разделе var, например:

var

student: TPerson; professor: TPerson;

Примчание

> В Delphi объект — это динамическая структура. Переменная-объект содержит не данные, а ссылку на данные объекта. Поэтому программист должен позаботиться о выделении памяти для этих данных.

Выделение памяти осуществляется при помощи специального метода класса — конструктора, которому обычно присваивают имя Create (создать). Для того чтобы подчеркнуть особую роль и поведение конструктора, в описании класса вместо слова procedure используется слово constructor.

Ниже приведено описание класса TPerson, в состав которого введен конструктор:

TPerson = class private

fname: string [ 15 ];

faddress: string[35];

constructor Cireate; // конструктор

public

procedure show; // метол

end;

Выделение памяти для данных объекта происходит путем присваивания значения результата применения метода-конструктора к типу (классу) объекта. Например, после выполнения инструкции

professor := TPerson.Create;

выделяется необходимая память для данных объекта professor.

Помимо выделения памяти, конструктор, как правило, решает задачу присваивания полям объекта начальных значений, т. е. осуществляет инициализацию объекта. Ниже приведен пример реализации конструктора для объекта TPerson:

constructor TPerson.Create;

begin

fname := '';

faddress := '';

end;

Реализация конструктора несколько необычна. Во-первых, в теле конструктора нет привычных инструкций New, обеспечивающих выделение динамической памяти (всю необходимую работу по выделению памяти выполняет компилятор). Во-вторых, формально конструктор не возвращает значения, хотя в программе обращение к конструктору осуществляется как к методу-функции.

После объявления и инициализации объект можно использовать, например, установить значение поля объекта. Доступ к полю объекта осуществляется указанием имени объекта и имени поля, которые отделяются друг от друга точкой. Хотя объект является ссылкой, правило доступа к данным с помощью ссылки, согласно которому после имени переменной, являющейся ссылкой, надо ставить значок ^, на объекты не распространяется.

Например, для доступа к полю fname объекта professor вместо professor*.fname надо писать

professor.fname

Очевидно, что такой способ доступа к полям объекта более естественен.

Если в программе какой-либо объект больше не используется, то можно освободить память, занимаемую полями данного объекта. Для выполнения этого действия используют метод-деструктор Free. Например, для того, чтобы освободить память, занимаемую полями объекта professor, достаточно записать

professor.Free;