Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы ТП.doc
Скачиваний:
3
Добавлен:
01.04.2025
Размер:
562.18 Кб
Скачать
  1. Методы (виды методов), конструктор и деструктор.

Методы (виды методов)

Инкапсулированные в классе процедуры и функции называются методами.

Методы объявляются в классе как обычные подпрограммы.

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

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

Type 

TmyCl=class(Tobject)

Fint:integer;

procedure proc1(var m:integer);

End;

Var O1: TmyCl;

procedure TmyCl.proc1(var m:integer); Begin m:= Fint +3;// заметим Fint, а не TmyCl.Fint

End; Begin …… O1.proc1(k);//в основной проге составное имя End.

В ООП различаются следующие виды методов

Методы класса

Конструктор и деструктор

Виртуальные

Динамические

Абстрактные

Перегружаемые

Конструктор и деструктор.

В состав любого класса входят два специальных метода – конструктор и деструктор.

В классе TОbject конструктор называется create деструктор destroy.

Конструктор и деструктор – это функция и процедура, но в виду их важности и единственности они объявляются с помощью зарезервированных слов Constructor Destructor

Type TmyCl=class(TObject) … end;

Var

Ob1: TmyCl;//выделяет указатель 4 б, cначалa хранит nil

Для разворачивания же объекта в динамической памяти используется метод класса конструктор (для Tobject это Create) в таком виде

Ob1:= TmyCl.Create;

В результате применения метода create:

выделяется дин память и разворачивается объект;

  • инициализируется объект

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

Любые действия с объектом возможны после работы конструктора. Деструктор разрушает объект в динамической памяти.

  1. Перекрытие методов, перекрытие конструктора, inherited

Перекрытие методов

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

Поля

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

Type Tfigure = class end;

Tcircle = class (Tfigure) 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.

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