![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Объявление объекта. Инициализация полей
Описав класс, мы можем объявить любое количество объектов этого класса, причем можно объявить отдельные объекты, массивы объектов и указатели на объекты данного класса. Например: 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 < имя объекта> 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} Существуют некоторые особенности выполнения операции присваивания для объектов родственных классов и полиморфных объектов. Они описаны ниже.
|