Отчет по практике: Основы программирования в среде Delphi

Если требуется переопределить виртуальный метод, он описывается с ключевым словом override, а не virtual. Если же указать в потомке слово virtual, это будет воспринято компилятором как начало новой иерархии виртуальных методов.

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

В классах, предназначенных для создания не объектов, а потомков, разрешается определять методы с ключевым словом abstract. Для таких методов реализация задается только в потомках класса. Класс, содержащий хотя бы один абстрактный метод, называется абстрактным. Создавать экземпляры объектов такого класса запрещается, а в потомках, предназначенных для создания объектов, все абстрактные методы надо обязательно переопределить. Абстрактные методы предназначены для задания общего интерфейса иерархии.

При переопределении обычных методов в производном классе непосредственный доступ к одноименному методу предка невозможен. Чтобы обойти это ограничение, при описании метода потомка можно задать ключевое слово overload (перегруженный). У перегруженных методов должен различаться список параметров, поскольку именно по типам аргументов компилятор выбирает, какой из одноименных методов вызвать. Перегруженные методы не могут объявляться в одном и том же классе – только в предке и потомке, например:

type

a = class

procedure max(a,b:integer):overload;

end;

b = class(a)

procedure max(a:real; b:integer; s:char):overload;

end;

var

x:b;

x.max(20,3); {вызывается метод из класса a}

x.max(0.1,10,’u’); {вызывается метод из класса b}

Виртуальные методы также можно перегружать, но при этом становится невозможным доступ к методу предка и компилятор выдает предупреждение. Чтобы подтвердить компилятору свои намерения, можно использовать ключевое слово reintroduce. Рассмотрим варианты переопределения виртуальных методов на примере:

type

a = class

procedure p1; virtual;

procedure p2; virtual;

procedure p3; virtual;

procedure p4; virtual;

procedure p5; virtual;

end;

b = class(a)

procedure p1;

procedure p1; reintroduce;

К-во Просмотров: 966
Бесплатно скачать Отчет по практике: Основы программирования в среде Delphi