Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы к ИГЭ ООП.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
254.41 Кб
Скачать
  1. Выделение памяти под экземпляр объекта. Привести пример объявления и реализации конструктора и деструктора.

Особой разновидностью методов являются конструкторы и деструкторы. Конструкторы создают, а деструкторы разрушают объекты.

Конструктор (constructor) - особый метод класса, обеспечивающий инициализацию объектов этого класса. Обычно имеет имя Create и вызывается следующим образом:

<имя инициализируемого объекта> := <имя класса>.Create(<список параметров>);

Особенность вызова конструктора - он вызывается с помощью ссылки на класс, а не на экземпляр класса (в отличие от других методов, которые вызываются с помощью ссылки на объект). Иначе просто нельзя - ведь экземпляр объекта в момент вызова конструктора еще не создан. Код конструктора класса статичен и находится в памяти. Он относится к классу, а не к его экземпляру.

Конструктор выделяет необходимую память, инициализирует поля, производит первоначальную подготовку объекта к последующему использованию.

Конструктор объявляется с помощью директивы constructor и чаще всего называется Create (создать).

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

Деструктор объявляется с использованием директивы destructor, чаще всего называется Destroy.

Синтаксис объявления конструктора и деструктора.

Type

<имя класса>=Сlass[(<Имя родительского класса>)]

Constructor <Имя конструктора>[(<параметры>)];

Destructor <Имя деструктора>[(<параметры>)];

End;

Реализация конструктора

Constructor <имя класса>.<имя конструктора> [(<параметры>)];

[<блок объявлений>]

Begin

<Исполняемые операторы>

End;

Реализация наследуемых конструкторов

Constructor <имя класса>.<имя конструктора> [(<параметры>)];

[<блок обьявлений>]

Begin

Inherited <имя конструктора>[(<параметры>)];

<инициализация собственных полей>

End;

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

Реализация деструктора

Destructor <имя класса>.<имя деструктора> [(<параметры>)];

[<блок объявлений>]

Begin

<исполняемые операторы>

End;

Реализация наследуемых деструкторов

Destructor <имя класса>.<имя деструктора> [(<параметры>)];

[<блок объявлений>]

Begin

<уничтожение собственных полей>

Inherited <имя деструктора> [(<параметры>)];

End;

Вызов конструктора

Begin

….

<имя обьекта>:=<имя класса>.<имя конструктора> [(<параметры>)];

.

End;

Вызов деструктора

Begin

.

<имя объекта>.<имя деструктора> [(<параметры>)];

End;

Пример.

Создание класса транспортных средств

type TTs = class

fname:string[20];

fmosh_dvig: integer;

constructor Create (name:string; mosh_dvig:integer); //объявление конструктора

destructor Destroy; //объявление деструктора

end;

Реализация конструктора

constructor TTs.Create (name:string; mosh_dvig:integer);

begin

fname:=name;

fmosh_dvig:=mosh_dvig;

end;

Реализация деструктора

destructor TTs.Destroy;

begin

end;

var

Form1: TForm1;

T:TTs;

Вызов конструктора

procedure TForm1.Button1Click(Sender: TObject);

Begin

T:=TTs.Create(edit1.Text,StrToInt(edit2.Text));

end

Вызов деструктора

procedure TForm1.Button3Click(Sender: TObject);

Begin

If T<>NIL then

begin

T.Destroy;

T:=nil;

end;

end;