Вход


Главная страница >> Учебный процесс >> Конспекты >> Delphi. Библиотека визуальных компонентов VCL >> Структура справочника и соглашения >> Полиморфизм >> Виртуальные и динамические методы
Переход на главную страницу

Сервер поддерживается
кафедрой информатики и вычислительной техники ГрГУ
тел. +375-(0)152-445-101
E-mail :
kadan@grsu.grodno.by


[Назад]    [Содержание ]    [Вперед]

  


Виртуальные и динамические методы


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

Такой поиск еще называется поздним связыванием. Разница между методами заключается в особенности поиска адреса.

Когда компилятор встречает обращение к виртуальному методу, он подставляет вместо обращения к конкретному адресу код, который обращается к специальной таблице и извлекает оттуда нужный адрес. Эта таблица называется таблицей виртуальных методов (Virtual Method Table, VMT). Такая таблица есть для каждого объектного типа. В ней хранятся адреса всех виртуальных методов класса, независимо от того, унаследованы ли они от предка или перекрыты. Отсюда и достоинства, и недостатки виртуальных методов: они вызываются сравнительно быстро (но медленнее статических), однако для хранения указателей на них требуется большое количество памяти.

Динамические методы вызываются медленнее, но позволяют более экономно расходовать память. Каждому динамическому методу системой присваивается уникальный индекс. В таблице динамических методов (Dynamic Method Table, DMT) класса хранятся индексы и адреса только тех динамических методов, которые описаны в данном классе. При вызове динамического метода происходит поиск в этой таблице; в случае неудачи просматриваются все классы-предки в порядке иерархии и, наконец, TObject, где имеется стандартный обработчик вызова динамических методов. Экономия памяти налицо. Те, для кого это не очевидно, найдут подробности в разделе "Информация о типе времени выполнения (RTTI). Указатели на класс"



[Назад]    [Содержание ]    [Вперед]

  


Для комментария : kadan@grsu.grodno.by

  
За содержание страницы отвечает Гончарова М.Н.
©
Кафедра СПиКБ, 2002-2017