Читайте также:
|
|
Конструктори і деструктори використовують ті самі узгодження про виклики, що й звичайні методи, за винятком того, що додатковий параметр розміром у слово, що називається параметром VMT, передається через стек безпосередньо перед параметром Self.
Для конструкторів параметр VMT містить зміщення таблиці віртуальних методів для запам’ятовування в полі таблиці віртуальних методів параметра Self, щоб його ініціалізувати.
Більше того, якщо конструктор викликається для розміщення динамічного об’єкту за допомогою розширеного синтаксису стандартної процедури New, через параметр Self передається вказівник Nil. Це змушує конструктор розміщувати новий динамічний об’єкт, адреса якого передається викликаючій програмі через DX:AX при поверненні з конструктора. Якщо конструктор не може розмістити об’єкт, то в DX:AX повертається порожній вказівник NIL.
Нарешті, якщо конструктор викликається з використанням власного ідентифікатора методу (ідентифікатора типу об’єкту, після якого йдуть крапка та ідентифікатор методу), то в параметрі таблиці віртуальних методів передається нульове значення. Це вказує конструктору, що йому не слід ініціалізувати поле Self таблиці віртуальних методів.
Для деструкторів нульове значення параметра таблиці віртуальних методів означає звичайний виклик, а ненульове вказує, що деструктор був викликаний з використанням розширеного синтаксису стандартної процедури Dispose. Це змушує деструктор видалити Self безпосередньо перед поверненням (розмір Self визначається з першого слова Self у VMT).
ПІДСУМОК
Динамічні методи є підкласом віртуальних методів і відрізняються від них тільки способом виклику на етапі виконання. Опис динамічного методу аналогічний опису віртуального методу, за винятком того, що він повинен включати в себе індекс динамічного методу, який вказується відразу після ключового слова VIRTUAL.
Якщо об’єкт чи якийсь з його предків містить віртуальні методи, для нього створюється таблиця віртуальних методів (VMT). Для об’єкта, що містить або успадковує динамічні методи, створюється таблиця динамічних методів (DMT)
Обробка виклику динамічного методу може вимагати значно більше часу, ніж виклик віртуального методу. Однак у тих випадках, коли самі дії, що виконуються динамічним методом, вимагають багато часу, додатковий простір, що зберігається таблицями динамічних методів може виявитися істотнішим.
Дата добавления: 2015-01-29; просмотров: 32 | Поможем написать вашу работу | Нарушение авторских прав |