Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТЕКСТЫ для лабработы 2 / вариант №32.rtf
Скачиваний:
22
Добавлен:
14.03.2016
Размер:
371.89 Кб
Скачать

X: Integer;

constructor Init;

destructor Done; virtual;

procedure P10; virtual 10;

procedure P20; virtual 20;

procedure P30; virtual 30;

procedure P30; virtual 30;

end;

type

TDerived = object(TBase)

Y: Integer;

constructor Init;

destructor Done; virtual;

procedure P10; virtual 10;

procedure P30; virtual 30;

procedure P50; virtual 50;

end;

B.Pascal 7 & Objects/LR - 383 -

На Рис. 21.10 и 21.11 показаны схемы таблицы виртуальных ме-

тодов и таблицы динамических методов для TBase и TDerived. Каждая

ячейка соответствует слову памяти, а каждая большая ячейка - двум

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

ТВМ TBase ТДМ TBase

┌──────────────────┐ ┌──────────────────┐

│ 4 │ │ 0 │

├──────────────────┤ ├──────────────────┤

│ -4 │ │ индекс в кэш │

├──────────────────┤ ├──────────────────┤

│ Смещ. ТДМ TBase │ │ смещение записи │

├──────────────────┤ ├──────────────────┤

│ 0 │ │ 4 │

├──────────────────┤ ├──────────────────┤

│ │ │ 10 │

│ @TBase.Done │ ├──────────────────┤

│ │ │ 20 │

└──────────────────┘ ├──────────────────┤

│ 30 │

├──────────────────┤

│ 40 │

├──────────────────┤

│ │

│ @TBase.P10 │

│ │

├──────────────────┤

│ │

│ @TBase.P20 │

│ │

├──────────────────┤

│ │

│ @TBase.P30 │

│ │

├──────────────────┤

│ │

│ @TBase.P40 │

│ │

└──────────────────┘

Рис. 21.10 Схемы таблицы виртуальных методов и таблицы дина-

мических методов для TBase.

B.Pascal 7 & Objects/LR - 384 -

Объектный тип имеет таблицу динамических методов только в

том случае, если в нем вводятся или переопределяются динамические

методы. Если объектный тип наследует динамические методы, но они

не переопределяются, и новые динамические методы не вводятся, то

он просто наследует таблицу динамических методов своего предка.

Как и в случае таблицы виртуальных методов, таблица динами-

ческих методов записывается в инициализированную часть сегмента

данных прикладной программы.

ТВМ TDerived ТДМ TDerived

┌───────────────────┐ ┌──────────────────┐

│ 6 │ │ Смещ. ТДМ TBase │

├───────────────────┤ ├──────────────────┤

│ -6 │ │ индекс в кеше │

├───────────────────┤ ├──────────────────┤

│ Смещ. ТДМ TDerived│ │ смещение записи │

├───────────────────┤ ├──────────────────┤

│ 0 │ │ 3 │

├───────────────────┤ ├──────────────────┤

│ │ │ 10 │

│ @TBase.Done │ ├──────────────────┤

│ │ │ 30 │

└───────────────────┘ ├──────────────────┤

│ 50 │

├──────────────────┤

│ │

│ @TDerived.P10 │

│ │

├──────────────────┤

│ │

│ @TDerived.P30 │

│ │

├──────────────────┤

│ │

│ @TDerived.T50 │

│ │

└──────────────────┘

Рис. 21.11. Схемы таблицы виртуальных методов и таблицы ди-

намических методов для TDerived.

Первое слово таблицы динамических методов содержит смещение

сегмента данных родительской таблицы динамических методов, или 0,

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

Второе и третье слово таблицы динамических методов использу-

ется в кеш-буфере просмотра динамических методов (см. далее).

Четвертое слово таблицы динамических методов содержит счет-

чик записи таблицы динамических методов. Непосредственно за ним

следует список слов, каждое из которых содержит индекс динамичес-

B.Pascal 7 & Objects/LR - 385 -

кого метода, а затем список соответствующих указателей методов.

Длина каждого списка задается счетчиком записи таблицы динамичес-

ких методов.

Значения файлового типа

─────────────────────────────────────────────────────────────────

Значения файлового типа представляются в виде записей. Типи-

зированные и нетипизированные файлы занимают 128 байт, которые

располагаются по следующей схеме:

type

TFileRec = record

Handle : word; { описатель }

Mode : word; { режим }

RecSize : word; { размер записи }

Private : array[1..26] of byte;

UserData : array[1..16] of byte;

Name : array[0..79] of char;

end;

Текстовые файлы занимают 256 байт со следующей схемой распо-

ложения:

type

TTextBuf = array[0..127] of char;

TTextRec = record

Handle : word;

Mode : word;

BufSize : word;

Private : word;

BufPos : word;

BufEnd : word;

BufPtr : ^TTextBuf;

OpenFunc : pointer;

Соседние файлы в папке ТЕКСТЫ для лабработы 2