TURBO PASCAL |
Новости
|
Конструкторы и деструкторыКонструкторы и деструкторы являются специализированными фор- мами методов. Используемые в связи с расширенным синтаксисом стандартных процедур New и Dispose, конструкторы и деструкторы обладают способностью размещения и удаления динамических объек- тов. Кроме того, конструкторы имеют возможность выполнить требуе- мую инициализацию объектов, содержащих виртуальные методы. Как и все другие методы, конструкторы и деструкторы могут наследовать- ся, а объекты могут содержать любое число конструкторов и дест- рукторов. Конструкторы используются для инициализации вновь созданных объектов. Обычно инициализация основывается на значениях, переда- ваемых конструктору в качестве параметров. Конструктор не может быть виртуальным, так как механизм диспетчеризации виртуального метода зависит от конструктора, который первым совершил инициали- зацию объекта. ┌────────────┐ ┌───┐ ┌────────────┐ ┌───┐ описание ───>│ заголовок ├──>│ ; ├──>│ блок ├──>│ ; ├─> конструктора │конструктора│ └───┘ │подпрограммы│ └───┘ └────────────┘ └────────────┘ ┌───────────┐ ┌─────────────┐ заголовок ────>│constructor├┬>│идентификатор├─┬────────────────> конструктора └───────────┘│ └─────────────┘^│ ┌──────────┐ ^ │ ┌─────────────┐││ │ список │ │ └>│ уточненный ├┘└─>│формальных├─┘ │идентификатор│ │параметров│ │ метода │ └──────────┘ └─────────────┘ Приведем несколько примеров конструкторов: 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, обычно сначала удаляет введенные в порожденном типе поля указателей, а затем в качестве последнего действия вы- зывает соответствующий сборщик деструктор непосредственного роди- теля для удаления унаследованных полей-указателей объекта. |
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |