TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая книга

Рассылка

Благодарности

Об авторе

 

 

Вызовы виртуальных методов 

             Для вызова  виртуального  метода  компилятор генерирует код,
        который выбирает адрес таблицы виртуальных методов из поля табли-
        цы виртуальных методов объекта, и затем вызывает метод, используя
        связанную с ним точку входа.  Например,  если дана переменная  PP
        типа Point, то вызов PP^.Show будет генерировать следующий код:

             les    di, PP             ; загрузить PP в ES:DI
             push   es                 ; передать, как параметр Self
             push   di
             mov    di, es:[di + 6]    ; извлечь смещение ТВМ из поля ТВМ
             call   DWORD PTR [di + 12] ; вызвать запись ТВМ для  Show

             Правила совместимости типов для объектных типов позволяют PP
        указывать на Point и на TCircle  или  на  любых  других  потомков
        TPoint.  И если вы просмотрите показанные здесь таблицы виртуаль-
        ных методов,  то вы увидите,  что для типа TPoint точка входа  со
        смещением   12   в   таблицы  виртуальных  методов  указывает  на
        TPoint.Show. Таким образом, в зависимости от фактического во вре-
        мя выполнения типа PP, инструкция CALL вызывает либо TPoint.Show,
        либо TCircle.Show, либо метод любого другого потомка TPoint.

             Если Show  является  статическим  методом,  то  для   вызова
        PP.Show будет генерироваться следующий код:

             les    di, PP        ; загрузить PP в ES:DI
             push   es            ; передать, как параметр Self
             push   di
             call   TPoint.Show   ; непосредственно вызвать TPonit.Show

             В данном случае не имеет значения,  на что указывает  PP,  и
        код всегда будет вызывать метод TPoint.Show.

Содержание

На первую страницу

Rambler's Top100 Rambler's Top100
PROext: Top 1000

(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz