Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основные механизмы и положения объектно-ориенти...doc
Скачиваний:
6
Добавлен:
01.05.2025
Размер:
261.12 Кб
Скачать

Implementation

Constructor TGeomFigure.Create;

{Заголовок описательной части конструктора}

begin

Inherited Create; {Вызов конструктора родительского класса}

Color := aColor; {Инициализация свойства, которая не может быть выполнена в родительском классе, так как свойство Color описано в классе TGeomFigure}

end;

End.

5.3.2. Использование экземпляра класса

Использование объекта заключается в вызове его методов и обращении к его свойствам аналогично работе с обычными переменными и подпрограммами, но с указанием переменной-объекта, к которому относятся эти свойства и методы:

<Объект>.<Свойство>

ИЛИ

<Объект>.<Метод>(<Список параметров>);

Пример использования экземпляра класса показан в листинге 5.14.

Листинг 5.14. Пример использования экземпляра класса

unit Geom3;

Interface

Type

TGeomFigure = class

protected

Color: Integer;

public

Constructor Create(aColor: Integer);

Procedure Draw; {Заголовок метода}

End;

Implementation

......... {Описание конструктора}

......... {Описание метода Draw}

Procedure UsingFigure; {Описание процедуры, использующей объект класса TGeomFigure}

Var

Figure: TGeomFigure;

begin

Figure := TGeomFigure.Create(3); {Создание экземпляра класса TGeomFigure}

Figure.Draw; {Вызов метода Draw}

Figure.Color := 13; {Изменение значения свойства Color}

end;

End.

5.3.3. Разрушение объекта. Деструктор

Объект, естественно, занимает место в памяти, которая необходима для хранения как свойств объекта, так и дополнительной информации, например, таблицы виртуальных методов. Для разрушения объекта и освобождения памяти, которая выделена для него в конструкторе, предназначен деструктор — специализированный метод, изначально определенный в классе TObject:

Destructor Destroy; virtual;

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

При переопределении деструктора необходимо указывать ключевое слово override, так как деструктор является виртуальным методом (помечен ключевым словом virtual в описании класса TObject). Последней командой описательной части деструктора должен быть вызов переопределенного деструктора родительского класса с помощью ключевого слова Inherited:

Inherited Destroy;

Прямой вызов деструктора не применяется для уничтожения экземпляра класса. Для этого предназначен метод Free, также описанный в классе TObject. Данный метод не может быть переопределен, так как не имеет в своем описании ключевого слова virtual, однако метод Free вызывает деструктор Destroy, поведение которого может быть специфическим (листинг 5.15).

Листинг 5.15. Пример создания и разрушения объекта

unit Geom4;

Interface

Type

TGeomFigure = class {Заголовок класса TGeomFigure, класс автоматически является наследником класса TObject}

Protected

Color: Integer; {Описание свойства с областью видимости protected}

public

Constructor Create(aColor: Integer); {Заголовок конструктора (область видимости public) }

Destructor Destroy; override; {Заголовок деструктора (область видимости public) }

End;

Implementation {Заголовок описательной части конструктора}

Constructor TGeomFigure.Create;

Begin

Inherited Create; {Вызов конструктора родительского класса}

Color := aColor; {Инициализация свойства, которая не

может быть выполнена в родительском

классе, так как свойство Color

описано в классе TGeomFigure}

end;

Destructor TGeomFigure.Destroy; {Заголовок описательной

части деструктора}

begin

Inherited Destroy; {Вызов деструктора родительского класса}

end;

Procedure UsingFigure; {Описание процедуры, использующей объект класса TGeomFigure}

Var

Figure: TGeomFigure;

begin

Figure := TGeomFigure.Create(3); {Создание экземпляра класса TGeomFigure}

Figure.Draw; {Вызов метода Draw}

Figure.Color:= 13; {Изменение значения свойства Color}

Figure.Free; {Разрушение объекта, автоматический вызов деструктора Destroy}

end;

End.