Объявление объекта. Инициализация полей

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

Например:

Var A:TRoom; {объект А классаТRооm}

B:array [1..5] of ТRоот; {массив объектов типа TRoom}

Type pTRoom = ^TRoom; {тип указателя на объекты класса TRoom}

Var рС:pTRoom; {указатель на объекты класса TRoom}

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

Выделение памяти осуществляют процедурой New или функцией New. Например:

New(pC); или pC:=New(pTRoom); ...

Для освобождения памяти используют процедуру Dispose. Например:

Dispose(pC); ...

Работа с динамическими объектами классов, построенных с использованием наследования со сложным полиморфизмом, имеет свои особенности, и мы вернемся к их рассмотрению позже.

Обращение к полям и методам объекта. Обращение к полям и методам объекта выполняется так же, как к полям записей:

  • с использованием точечной нотации:

<имя объекта>.<имя поля> или <имя объекта>.<имя метода>;

  • с использованием оператора with:

with <имя объекта> do

begin

...<имя поля>...

...<имя метода>...

end; ...

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

1. прямым занесением в поле, например:

Program ex;

type TRoom = object

length, width:real; {поля: длина и ширина комнаты}

function Square:real; {метод определения площади}

end;

Function TRoom.Square; {тело метода определения площади}

Begin

Square:= length* width;

End;

Var A:TRoom; {объявляем объект- переменную}

Begin

A.length:=3.5; {инициализируем поля объекта}

A. width:=5.1;

WriteLn( 'Площадь комнаты равна =', A.Square);

End.

2 с использованием типизированных констант - синтаксис описания совпадает с синтаксисом типизированных констант типа «запись»:

Program ex;

Type TRoom = object

length, width:real; {поля: длина и ширина комнаты}

function Square:real; {метод определения площади}

end;

Function TRoom.Square; {тело метода определения плошали}

Begin

Square:=length* width;

End;

Const

A:TRoom = (length:3.5; width:5.1); {объявляем константу}

Begin

WriteLn('Площадь комнаты равна =', A.Square);

End.

3. посредством специального метода - очень часто в качестве такого метода используют специальную инициализирующую процедуру, которую рекомендуется называть init:

Program ex;

Type TRoom = object

length, width:real; {поля: длина и ширина комнаты}

function Square: real; {метод определения площади}

Procedure TRoom.Init; {инициализирующии метод}

end;

{метод определении нлощади}

Function TRoom.Square;

Begin

Square := length* width;

End;

{инициализирующий метод}

Procedure TRoom.Init;

Begin

length:=l; width:=w;

End;

Var A:TRoom; {объявляем объект-переменную}

{основная программа}

Begin

A.Init(3.5,5.1); {инициализируем поля объекта}

WriteLn( 'Площадь комнаты равна ', A.Square);

End.

Операции присваивания объектов. Над объектами одного класса определена операция присваивания. Физически при этом происходит копирование полей одного объекта в другой методом «поле за полем»:

Const A:TRoom=(length:3.7; width:5.2);

Var В:TRoom;...

В:= А; {теперь B.length=3.7, a B.width=5.2}

Существуют некоторые особенности выполнения операции присваивания для объектов родственных классов и полиморфных объектов. Они описаны ниже.








Дата добавления: 2015-12-01; просмотров: 1087;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.008 сек.