ВУЗ:
Составители:
Рубрика:
Как уже говорилось, методы класса могут перекрываться в потом-
ках. Например: 
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
Страницы
- « первая
- ‹ предыдущая
- …
- 66
- 67
- 68
- 69
- 70
- …
- следующая ›
- последняя »
