Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
L05.doc
Скачиваний:
4
Добавлен:
10.11.2018
Размер:
233.98 Кб
Скачать

Тип «Указатель»

<Тип «Указатель»> : : =

^<Тип> ;

<Тип «Указатель»> : : =

pointer ;

Пример 1.

{ TP7 }

program P0702;

type

pInteger = ^integer ;

ppInteger = ^pInteger ;

pppInteger = ^ppInteger ;

var

p_i: ^integer ; // Аналогично p_i: pInteger ;

p_b: ^boolean ;

p_c: ^char ;

p: pointer ;

c: char ;

b: boolean ;

i: integer ;

begin

clrscr;

Writeln('sizeof(p)=', sizeof(p)) ;

Writeln('sizeof(b)=', sizeof(b)) ;

Writeln('sizeof(i)=', sizeof(i)) ;

Writeln('sizeof(c)=', sizeof(c)) ;

Readln;

b:=false ;

Writeln(b) ;

p_b := @b ; // p_i := @b ;

p := p_b ;

p_i := p ;

p_i^ := 7 ;

Writeln(b) ;

c:='A' ;

Writeln(c) ; { 'A' }

p_c := @c ;

p := p_c ;

p_i := p ;

p_i^ := p_i^ + 7 ;

Writeln(c) ; { 'H' }

Readln ;

end.

Пример 2.

type

DateTime = record { Delphi: TDateTime }

Year, Month, Day, Hour, Min, Sec: word ;

end ;

MyRec = record

N: longint ;

FIO: string[40] ;

BirthDate: DateTime ;

end;

var

pMyRec: ^MyRec;

z : MyRec;

begin

pMyRec := @z ;

pMyRec^.N := 1;

z.N := 1;

pMyRec^.BirthDate.Year := 1999;

end.

Динамические структуры данных Линейный однонаправленный список

procedure PrependItem(sName: string; Salary: double);

procedure AppendItem(sName: string; Salary: double);

procedure InsertItem(sName: string; Salary: double);

{$F+}

{$N+}

uses Crt, Strings;

type

pPersonType = ^PersonType;

PersonType = record

sName: string[40];

Salary: double;

pNext: pPersonType;

end;

var

pHead, pTail, pCurr: pPersonType;

function CompareItems(pCurr1,pCurr2: pPersonType): integer;

var

. . .

begin

. . .

end;

function AloneItem(sName: string; Salary: double;

var pNew: pPersonType): boolean;

begin

New(pNew);

if pNew = Nil then Halt;

pNew^.sName := sName;

pNew^.Salary := Salary;

pNew^.pNext := Nil;

if pHead=Nil then

begin

pHead := pNew; pTail := pNew; AloneItem := true;

end

else

AloneItem := false;

end;

procedure AppendItem(sName: string; Salary: double);

var

pNew: pPersonType;

begin

if not AloneItem(sName, Salary, pNew) then

begin

pTail^.pNext := pNew;

pTail := pNew;

end;

end;

procedure PrependItem(sName: string; Salary: double);

var

pNew: pPersonType;

begin

if not AloneItem(sName, Salary, pNew) then

begin

pNew^.pNext := pHead;

pHead := pNew;

end;

end;

Объектно-ориентированное программирование (ооп)

Понятие класса – дополнение к понятию типа.

Тип [обычной] переменной определяет множество значений, которые она способна принимать, и множество операций, которые над ней можно производить.

Класс [объектной] переменной определяет и множество значений, которые она способна принимать, и множество операций, которые над ней можно производить, и множество операций, которые она сама над собой способна производить.

Три принципа ООП:

  1. Инкапсуляция

  2. Наследование

  3. Полиморфизм

Инкапсуляция – соединение в единой структуре данных и программных кодов (т.н. методов), предназначенных для обработки именно этих данных.

Наследование – возможность построения нового класса на основе существующего (т.н. базового, или родительского) класса с дополнением и/или переопределением данных и методов. Наследование есть механизм передачи данных и методов родительского класса в дочерний класс.

Полиморфизм – возможность обращения по одному имени к разным методам.

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

По сути (но не по синтаксису), объектная переменная есть указатель на первый байт области памяти, выделенной под поля объекта. Эта область памяти предоставляется объекту тогда, когда он «начинает жить», и высвобождается тогда, когда он свою жизнь завершает.

Вместе с «рождением» первого экземпляра объекта заданного класса в память загружается и его инкапсулированные программные коды. Второй и последующие экземпляры, занимая под свои поля новые области памяти, пользуются уже загруженным кодом первого экземпляра.

Три группы атрибутов объекта:

  1. Методы

  2. Свойства

  3. События

Методы – процедуры и функции, описываемые при описании класса, предназначенные для приема объектом данных извне, изменения данных внутри объекта (модификации полей), подачи данных от объекта внешним «потребителям».

Свойства (для пользователя объекта) – параметры (числовые, символьные, строковые и прочих типов), характеризующие состояние объекта в данный момент. Обращение к свойствам объекта внешне выглядит как обращение к полям переменной типа «запись».

Свойства (для программиста класса) – процедуры и функции, назначение которых совпадает с назначением методов. В среде программистов не утихают споры о праве свойств на существование.

События – это то, что с объектом «может произойти», и на что можно предусмотреть реакцию кода класса.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]