Объявление объекта. Инициализация полей
Описав класс, мы можем объявить любое количество объектов этого класса, причем можно объявить отдельные объекты, массивы объектов и указатели на объекты данного класса.
Например:
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; просмотров: 1137;