TURBO PASCAL |
Новости
|
Объектные типыВнутренний формат данных объекта имеет сходство с внутренним форматом записи. Поля объекта записываются в порядке их описаний как непрерывная последовательность переменных. Любое поле, унас- ледованное от родительского (порождающего) типа, записывается пе- ред новыми полями, определенными в дочернем (порожденном) типе. Если объектный тип определяет виртуальные методы, конструк- тор или деструктор, то компилятор размещает в объектном типе до- полнительное поле данных. Это 16-битовое поле, называемое полем таблицы виртуальных методов (VMP), используется для запоминания смещения таблицы виртуальных методов в сегменте данных. Поле таб- лицы виртуальных методов следует непосредственно после обычных полей объектного типа. Если объектный тип наследует виртуальные методы, конструкторы или деструкторы (сборщики мусора), то он также наследует и поле таблицы виртуальных методов, благодаря че- му дополнительное поле таблицы виртуальных методов не выделяется. Инициализация поля таблицы виртуальных методов экземпляра объекта осуществляется конструктором (или конструкторами) объект- ного типа. Программа никогда не инициализирует поле таблицы вир- туальных методов явно и не имеет к нему доступа. Следующие примеры иллюстрируют внутренние форматы данных объектных типов. type PLocation = ^TLocation; TLocation = object X,Y: integer; procedure Init(PX, PY: Integer); function GetX: Integer; function GetY: Integer; end; PPoint = ^TPoint; TPoint = object(TLocation) Color: Integer; constructor Init(PX, PY, PColor: Integer); destructor Done; virtual; procedure Show; virtual; procedure Hide; virtual; procedure MoveTo(PX, PY: I+nteger); virtual; end; PCircle = ^TCircle; TCircle = object(TPoint) Radius: Integer; constructor Init(PX, PY, PColor, PRadius: Integer); procedure Show; virtual; B.Pascal 7 & Objects/LR - 378 - procedure Hide; virtual; procedure Fill; virtual; end; Рисунок 21.8 показывает размещение экземпляров типов TLocation, TPoint и TCircle: каждый прямоугольник соответствует одному слову памяти. TLocation TPoint TCircle ┌──────────┐ ┌───────────┐ ┌───────────┐ │ X │ │ X │ │ X │ ├──────────┤ ├───────────┤ ├───────────┤ │ Y │ │ Y │ │ Y │ └──────────┘ ├───────────┤ ├───────────┤ │ Color │ │ Color │ ├───────────┤ ├───────────┤ │ VMT │ │ VMT │ └───────────┘ ├───────────┤ │ Radius │ └───────────┘ Рис. 21.8 Схема экземпляров типов TLocation, TPoint и TCircle. Так как TPoint является первым типом в иерархии, который вводит виртуальные методы, то поле таблицы виртуальных методов размещается сразу после поля Color. |
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |