- •30. Конструктор и деструктор.
- •Классификация конструкторов.
- •1.По инициализации состояния класса.
- •2.По тому, кто определяет конструкторы
- •1 Этап. Анализ требований.
- •2 Этап. Разработка или проектирование.
- •3 Этап. Реализация системы или программирование.
- •4 Этап. Тестирование и отладка.
- •32.Современные технологии программирования.
- •33.Основные преимущества ооп.
- •1.Форма - модуль со связанным с ним окном
- •40. Полиморфизм
30. Конструктор и деструктор.
В состав любого класса входят два специальных метода -конструктор и деструктор. У класса TObject эти методы называются Сreate и Destroy, так же они называются в подавляющем большинстве его потомков.
Конструктор распределяет объект в динамической памяти и помещает адрес этой памяти в переменную self, которая автоматически объявляется в классе.
Деструктор удаляет объект из памяти. Обращение к конструктору должно предварять любое обращение к полям и некоторым методам объекта.
По своей форме конструкторы и деструкторы являются процедурами, но объявляются с помощью зарезервированных слов Сonstructor и Destructor:
type
TMyClass = class
IntField: Integer;
Constructor Create(Value: Integer);
Destructor Destroy;
end;
Любые поля объекта, а также методы класса, оперирующие с его полями, могут вызываться только после создания объекта с помощью вызова конструктора, т. к. конструкторы распределяют объект в динамической памяти и делают действительным содержащийся в объекте указатель.
var
MyObject: TMyClass;
begin
MyObject.IntField := 0;
{ Ошибка! Объект не создан конструктором!}
MyObject := TMyClass.Create;
// Надо так: создаем объект
MyObject.IntField := 0;
// и обращаемся к его полю
MyObject.Free;
// Уничтожаем ненужный объект
end;
В базовом классе TObject определен метод Free, который сначала проверяет действительность адреса объекта и лишь затем вызывает деструктор Destroy. Обращение к деструктору объекта будет ошибочным, если объект не создан конструктором, поэтому для уничтожения ненужного объекта следует вызывать метод Free, как это сделано в предыдущем примере.
Большинство конструкторов реализуют некоторые действия, необходимые для правильной работы объекта. Поэтому в конструкторе класса-потомка следует сначала вызвать конструктор своего родителя, а уже затем осуществлять дополнительные действия. Вызов любого метода родительского класса достигается с помощью зарезервированного слова inherited (унаследованный):
Constructor TMyClass.Create(Value:Integer);
// Возможная реализация конструктора
begin
Inherited Create; // Вызываем унаследованный конструктор
IntField := Value; // Реализуем дополнительные действия
end;
Классификация конструкторов.
1.По инициализации состояния класса.
Инициализирующие конструкторы содержат отдельные значения, используемые для инициализации состояния полей экземпляра класса. В списке параметров может быть указан нуль, один или более параметров любых типов.
Один из инициализирующих конструкторов, имеющий пустой список параметров, имеет специальное наименование – пустой конструктор.
Пустой конструктор также инициализирует состояние экземпляра класса, используя для этого предопределенные значения (в соответствии с требованиями задачи).
Копирующий конструктор инициализирует состояние класса значением другого экземпляра этого класса (создает копию существующего экземпляра класса). В списке параметров указывается единственный параметр, имеющий тип «ссылка на экземпляр класса».