Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
54
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

Конструкторы и деструкторы

Конструкторы и деструкторы являются специализированными фор-

мами методов. Используемые в связи с расширенным синтаксисом

стандартных процедур New и Dispose, конструкторы и деструкторы

обладают способностью размещения и удаления динамических объек-

тов. Кроме того, конструкторы имеют возможность выполнить требуе-

мую инициализацию объектов, содержащих виртуальные методы. Как и

все другие методы, конструкторы и деструкторы могут наследовать-

ся, а объекты могут содержать любое число конструкторов и дест-

рукторов.

Конструкторы используются для инициализации вновь созданных

объектов. Обычно инициализация основывается на значениях, переда-

ваемых конструктору в качестве параметров. Конструктор не может

быть виртуальным, так как механизм диспетчеризации виртуального

метода зависит от конструктора, который первым совершил инициали-

зацию объекта.

------------- ---- ------------- ----

описание --->¦ заголовок +-->¦ ; +-->¦ блок +-->¦ ; +->

конструктора ¦конструктора¦ L---- ¦подпрограммы¦ L----

L------------- L-------------

------------ --------------

заголовок ---->¦constructor+T>¦идентификатор+-T---------------->

конструктора L------------¦ L--------------^¦ ----------- ^

¦ --------------¦¦ ¦ список ¦ ¦

L>¦ уточненный +-L->¦формальных+--

¦идентификатор¦ ¦параметров¦

¦ метода ¦ L-----------

L--------------

Приведем несколько примеров конструкторов:

constructor Field.Copy(var F: Field);

begin

Self := F;

end;

constructor Field.Init(FX, FY, FLen: integer; FName: string);

begin

X := FX;

Y := FY;

GetMem(Name, Length (FName) + 1);

Name^ := FName;

end;

constructor TStrField.Init(FX, FY, FLen: integer; FName:

string);

begin

inherited Init(FX, FY, FLen, FName);

Field.Init(FX, FY, FLen, FName);

GetMem(Value, Len);

Value^ := '';

end;

Главным действием конструктора порожденного (дочернего) ти-

па, такого как указанный выше TStrField.Init, почти всегда явля-

ется вызов соответствующего конструктора его непосредственного

родителя для инициализации наследуемых полей объекта. После вы-

полнения этой процедуры, конструктор инициализирует поля объекта,

которые принадлежат только порожденному типу.

Деструкторы ("сборщики мусора") являются противоположностями

конструкторов и используются для очистки объектов после их ис-

пользования. Обычно очистка состоит из удаления всех полей-указа-

телей в объекте.

Примечание: Деструктор может быть виртуальным и часто

является таковым. Деструктор редко имеет параметры.

Приведем несколько примеров деструкторов:

destructor Field.Done;

begin

FreeMem(Name, Length (Name^) + 1);

end;

destructor StrField.Done;

begin

FreeMem(Value, Len);

Field.Done;

end;

Деструктор дочернего типа, такой как указанный выше

TStrField.Done, обычно сначала удаляет введенные в порожденном

типе поля указателей, а затем в качестве последнего действия вы-

зывает соответствующий сборщик деструктор непосредственного роди-

теля для удаления унаследованных полей-указателей объекта.

Соседние файлы в предмете Программирование на Pascal