Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






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

Например:

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}

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






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.