русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Виклик конструкторів та деструкторів


Дата додавання: 2014-04-22; переглядів: 1102.


Конструктори і деструктори використовують ті самі узгодження про виклики, що й звичайні методи, за винятком того, що додатковий параметр розміром у слово, що називається параметром VMT, передається через стек безпосередньо перед параметром Self.

Для конструкторів параметр VMT містить зміщення таблиці віртуальних методів для запам’ятовування в полі таблиці віртуальних методів параметра Self, щоб його ініціалізувати.

Більше того, якщо конструктор викликається для розміщення динамічного об’єкту за допомогою розширеного синтаксису стандартної процедури New, через параметр Self передається вказівник Nil.Це змушує конструктор розміщувати новий динамічний об’єкт, адреса якого передається викликаючій програмі через DX:AX при поверненні з конструктора. Якщо конструктор не може розмістити об’єкт, то в DX:AX повертається порожній вказівник NIL.

Нарешті, якщо конструктор викликається з використанням власного ідентифікатора методу (ідентифікатора типу об’єкту, після якого йдуть крапка та ідентифікатор методу), то в параметрі таблиці віртуальних методів передається нульове значення. Це вказує конструктору, що йому не слід ініціалізувати поле Self таблиці віртуальних методів.

Для деструкторів нульове значення параметра таблиці віртуальних методів означає звичайний виклик, а ненульове вказує, що деструктор був викликаний з використанням розширеного синтаксису стандартної процедури Dispose. Це змушує деструктор видалити Self безпосередньо перед поверненням (розмір Self визначається з першого слова Self у VMT).

 

Підсумок

Динамічні методи є підкласом віртуальних методів і відрізняються від них тільки способом виклику на етапі виконання. Опис динамічного методу аналогічний опису віртуального методу, за винятком того, що він повинен включати в себе індекс динамічного методу, який вказується відразу після ключового слова VIRTUAL.

Якщо об’єкт чи якийсь з його предків містить віртуальні методи, для нього створюється таблиця віртуальних методів (VMT). Для об’єкта, що містить або успадковує динамічні методи, створюється таблиця динамічних методів (DMT)

Обробка виклику динамічного методу може вимагати значно більше часу, ніж виклик віртуального методу. Однак у тих випадках, коли самі дії, що виконуються динамічним методом, вимагають багато часу, додатковий простір, що зберігається таблицями динамічних методів може виявитися істотнішим.

 

Питання по темі

1. Який із описів динамічного методу не містить синтаксичних помилок

а) FUNCTION GetName:String;VIRTUAL 5;

б) FUNCTION GetName:String;VIRTUAL=5;

в) FUNCTION GetName:String;VIRTUAL:5;

 

2. Яка функція повертає записаний у таблиці віртуальних методів розмір екземпляру об’єктного типу?

а) SizeOfObject

б) SizeOf

в) Size

 

3. Що повертає функція TypeOf?

а)вказівник на таблицю віртуальних методів об’єктного типу

б)вказівник на таблицю динамічних методів об’єктного типу

в)розмір таблиці віртуальних методів об’єктного типу

 

 

4. Яке з наступних тверджень правильне?

а) в таблиці динамічних методів (DMT) кодуються всі методи типу.

б) в таблиці динамічних методів (DMT) кодуються лише ті методи, які були в об’єктному типі перевизначені.

в) в таблиці динамічних методів (DMT) кодуються всі віртуальні методи типу.

 

5. Що дає розробнику використання динамічних методів?

а) економію часу

б) можливість безпосереднього доступу до прихованих методів і даних об’єкту

в) економію простору

 

 



<== попередня лекція | наступна лекція ==>
Виклик динамічних методів | Тема 8 Об’єктно-орієнтоване програмування в Delphi


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн