Конструкторы

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

   
Конструктор - это метод особого вида, который создает объекты и делает для них начальные установки. Заголовок конструкторов начинается с ключевого слова constructor.

   
Отметим, что в качестве имен конструкторов, в отличие от Borland Pascal, в котором применялся идентификатор Init, в Object Pascal рекомендуется использовать идентификатор Create.

   
Поскольку в Object Pascal все объекты динамические, то каждый объект должен быть создан и инициализирован отдельным вызовом конструктора. Причем вызов конструктора может выполняться двумя способами:
с помощью ссылки на имя конкретного объекта и с помощью ссылки на имя класса.

   
Первый способ вызова использовался и ранее в Borland Pascal, a второй способ добавлен по той причине, что конструктор в Object Pascal выполняет не только инициализацию, но и создание объектов. Как было рассмотрено выше,
все объекты в Object Pascal являются потомками класса TObject и, соответственно этому, наследуют базовый вариант конструктора Create, который описан в этом классе. Следовательно, если для создания объекта какого-либо класса
достаточно только стандартных действий, то в этом классе конструктор можно не объявлять, а вызывать наследуемый из TObject.

type
  TSimpleClass  =  class 
    FField   :   Integer; 
    property  Simple : Integer read FField write  FField; 
  end; 

var
  SimpleVar  :  TSimpleClass;

implementation
      .    .    .    .
  SimpleVar  :=  TSimpleClass.Create; 
  SimpleVar.Simple := 10; 
  SimpleVar.Free;

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

   
При создании нового объекта конструктор всегда вызывается с помощью ссылки на имя класса:

    SimpleVar := TSimpleClass.Create;

   
При этом сначала выполняются стандартные действия конструктора, которые заключаются в выделении в "куче" памяти для нового объекта и обнулении всех его полей (числовым полям присваивается нуль, строковым полям - пустая строка, указателям - nil),
а затем выполняются действия, описанные для конструктора программистом. После этого конструктор возвращает указатель на созданный и инициализированный объект, который будет иметь такой же тип, какой был указан в операторе вызова конструктора.

   
Если конструктор вызывается как метод уже существующего объекта:

    SimpleVar.Create;
           или 
    inherited Create;

то выполняются только действия, описанные программистом, а стандартные начальные действия и возврат указателя не выполняются. Таким способом вызываются, как правило, наследуемые конструкторы.

   
Особым случаем являются виртуальные конструкторы, которые в зависимости от способа вызова работают по разному. Если виртуальный конструктор вызывается с помощью ссылки на имя класса, то он действует точно также, как и статический конструктор.
Если же он вызывается как метод объекта, то позволяет выполнять полиморфические действия аналогично обычным виртуальным методам.

   
На следующем шаге мы поговорим о деструкторах.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий