Delphi-6 - среда разработки программного обеспечения для систем промышленной автоматизации. Букреев В.Г - 68 стр.

UptoLike

Составители: 

Как уже говорилось, методы класса могут перекрываться в потом-
ках. Например:
type
TParentClass = class Procedure DoWork;
end;
TChildClass = class(TParentClass) Procedure DoWork;
end;
Потомки обоих классов могут выполнять сходную по названию
процедуру DoWork, но, в общем случае, будут это делать по-разному.
Такое замещение методов называется статическим, т. к. реализуется
компилятором.
В Object Pascal гораздо чаще используется динамическое замеще-
ние методов на этапе прогона программы. Для реализации этого метода,
замещаемый в родительском классе, должен объявляться как динамиче-
ский (с директивой dynamic) или виртуальный (virtual). Встретив такое
объявление, компилятор создаст две таблицы – DMT (Dynamic Method
Table) и VMT (Virtual Method Table) и поместит в них адреса точек вхо-
да, соответственно, динамических и виртуальных методов. При каждом
обращении к замещаемому методу компилятор вставляет код, позво-
ляющий извлечь адрес точки входа в подпрограмму из той или иной
таблицы. В классе-потомке замещающий метод объявляется с директи-
вой override (перекрыть). Получив это указание, компилятор создаст код,
который на этапе прогона программы поместит в родительскую таблицу
точку входа метода класса-потомка, что позволит родителю выполнить
нужное действие с помощью нового метода.
Пусть, например, родительский класс с помощью методов show и
Hide соответственно показывает что-то на экране или прячет изображе-
ние. Для создания изображения он использует метод Draw с логическим
параметром:
type
TVisualObject = class(TWinControl)
Procedure Hide;
Procedure Show;
Procedure Draw(IsShow: Boolean); virtual;
end;
TVisualChildObject = class(TVisualObject)
Procedure Draw(IsShow: Boolean); override;
end;
// Реализация методов Show и Hide:
Procedure TVisualObject.Show;
begin
68