Руководство по языку B.Pascal 7




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


Конструкторы и деструкторы являются специализированными фор- мами методов. Используемые в связи с расширенным синтаксисом стандартных процедур 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, почти всегда явля- ется вызов соответствующего конструктора его непосредственного родителя для инициализации наследуемых полей объекта. После вы- полнения этой процедуры, конструктор инициализирует поля объекта, которые принадлежат только порожденному типу.




Содержание  Назад  Вперед