Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Климов. Лекции / Алг_яз_Лекция_8.pptx
Скачиваний:
23
Добавлен:
14.05.2015
Размер:
442.32 Кб
Скачать

Четвертое слово ТВМ резервируется и всегда равно 0.

Таблица виртуальных методов.

11

Начиная со смещения 8,

Таблица виртуальных методов.

12

TBM

одно слово памяти

два слова памяти

Пример размещения таблиц виртуальных методов типов TStaf и TTeacher13

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

методов объектного типа в инициализируемых экземплярах.

Пусть у нас имеется

экземпляр S типа TStaf и

Например:

 

экземпляр Т типа Ттеасher

вызов S.Init будет автоматически записывать смещение

 

таблицы виртуальных методов типа TStaff в поле

 

таблицы виртуальных методов экземпляра S

а вызов T.Init точно так же запишет смещение таблицы

 

виртуальных методов типа ТТеасher в поле таблицы

 

виртуальных методов экземпляра Т.

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

Таким образом, при необходимости конструктор может

 

выполнить вызов виртуального метода.

 

Таблица виртуальных методов.

14

Для непосредственной работы с ТВМ используются две функции

FUNCTION SizeOf(Obj):WORD;

FUNCTION TypeOf(Obj):POINTER;

Функции для работы с таблицей виртуальных методов.

15

Примененная к экземп

Функции для работы с таблицей виртуальных методов.

16

Функция TypeOf может использоваться для проверки фактического типа экземпляра.

Например:

IF TypeOf(Self) = TypeOf(TPerson) THEN ...;

Функции для работы с таблицей виртуальных методов.

17

Таблица динамических методов.

18

Таблица динамических методов.

19

Переопределим типы TStaf и

 

 

Ттеасher следующим образом:

 

 

TStaff = OBJECT(TPerson);

 

 

 

Bonus : REAL;

 

 

 

CONSTRUCTOR Init(Nm,Dt :STRING; Rt,Bn :REAL);

 

DESTRUCTOR Done;

VIRTUAL;

 

FUNCTION GetSum : REAL;

VIRTUAL 10;

 

PROCEDURE ShowSum; VIRTUAL 20;

 

end;PROCEDURE ShowAll;

VIRTUAL 30;

 

TTeacher = OBJECT(TStaff)

 

 

 

Hours : WORD;

 

 

 

HourRate : REAL;

 

 

 

CONSTRUCTOR Init(Nm,Dt :STRING; Rt,Bn,Hrt :REAL; Hr :WORD);

 

DESTRUCTOR Done;

VIRTUAL;

 

FUNCTION GetSum:REAL;

VIRTUAL 10;

 

PROCEDURE ShowAll;

VIRTUAL 30;

 

END;

 

 

 

Таблица динамических методов.

20

TBM

одно слово памяти

два слова памяти

Схемы таблиц виртуальных и динамических методов для TStaf

21

TBM

одно слово памяти

два слова памяти

Схемы таблиц виртуальных и динамических методов для ТТеаcher

22

Соседние файлы в папке Климов. Лекции