Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
билеты по делфи.docx
Скачиваний:
2
Добавлен:
18.04.2019
Размер:
388.08 Кб
Скачать

Var MyOb:TmyCl;

Begin MyOb.Fint:=0; //не верно

MyOb.Create; //

MyOb:=TmyCl.Create; //

MyOb.Fint:=0; //

MyOb.Destroy;// можно

MyOb.Free; //но

End.

Утечка памяти Type TMyCl=class Fint: integer; End;

Var MyOb:TmyCl; Begin For I:=1 to 10 do MyOb:=TmyCl.Create; MyOb.Fint:=0; MyOb.Free End.

Билет 7.

  • ПЕРЕОПРЕДЕЛЕНИЕ (ПЕРЕКРЫТИЕ) МЕТОДОВ

Type Tpar=class Procedure DoWork; End;

Tchild=class(Tpar) Procedure DoWork; End;

Var o1: Tpar; o2: Tchild;

Procedure Tpar . DoWork; Begin writeln(‘стучит молотком’); end;

Procedure Tchild . DoWork; Begin writeln(‘играется в песочнице’); end;

Begin O1:= Tpar.create; O2:= Tchild.create;

O1.DoWork; // стучит молотком

O2.DoWork; // играется в песочнице end.

Методы в классе могут перекрываться (еще говорят переопределяться) в потомках, т.е. процедуры с одним и тем же именем в предке и потомке выполняют разные алгоритмы.

Объекты обоих классов (предка и потомка) будут выполнять сходную процедуру по-разному. Такое замещение называется статическим, т.к. реализуется компилятором на этапе компиляции.

  • ПЕРЕОПРЕДЕЛЕНИЕ КОНСТРУКТОРА

Конструктор не редко переопределяется для выполнения инициализации полей. Полное переопределение не рекоменду-ется, рационально вызвать конструктор предка, затем произвести собственные дополнительные действия. Вызвать любой перекрытый метод родительского класса можно при помощи зарезервированного слова inherited.

ПЕРЕОПРЕДЕЛЕНИЕ КОНСТРУКТОРА

Type Tfigure = class end;

Tcircle = class (figure) r:real; constructor create(ar:real); end;

Var figure:Tfigure; circle:Tcircle;

constructor Tcircle.create(ar:real); begin inherited create; r:=ar;// инициализируем end;

Begin figure:=Tfigure.Create; circle:=Tcircle.create(1.25); end.

Билет 8.

  • ПОЛЯ

Поля – это данные, инкапсулированные в классе.

В классе поля описываются как обычные переменные.

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

Type 

TmyCl=class(Tobject)

Fint:integer;

Fstr:string;

procedure proc1(var m:integer);

End;

Var o1,o2: TmyCl; n:integer;

procedure TmyCl.proc1(var m:integer); Begin m:= Fint +5; End;

Begin

O1:= TmyCl.create;

O2:= TmyCl .create;

O1.Fint:=10; O2.Fint:=20;

O1.proc1(n); write(n);

O2.proc1(n); write(n);

End.

  • СВОЙСТВА

Как мы помним:

Свойства – это механизм доступа к данным.

Возможно прямое обращение к полям, но фундаментальный принцип инкапсуляции требует обращаться к полям посредством свойств и методов (во избежание ошибок, для обеспечения корректности изменения данных).

Type

TМan=class(Tobject)

FVozrast:integer;

End;

Var

мan: Tмan;

Begin

мan:= Tмan.create;

мan.Fvozrast:=188;

Man.Free;

End.

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

Function GetVozr:integer; //верни значение возраста.

Procedure SetVozr(r:integer); //установи возраст, но без глупостей не 1000 лет

Синтаксис описания свойства выглядит так:

Property Vozrast:integer read GetVozr write SetVozr;

Property Vozrast:integer read GetVozr ;

Property Vozrast:integer write SetVozr;

Property Vozrast:integer;

Type

TMan=class(Tobject)

private

FVozrast:integer;

protected

Function GetVozr:integer; Procedure SetVozr(r:integer);

public

Property Vozrast:integer read GetVozr write SetVozr;

End;

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