TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая книга

Рассылка

Благодарности

Об авторе

 

 

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

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

Содержание

На первую страницу

Rambler's Top100 Rambler's Top100
PROext: Top 1000

(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz