АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция
|
ПІЗНЄ СКРІПЛЕННЯ
|
| Допитливий читач може здивуватися, як же компілятор дізнається, яку саме функцію йому компілювати? У програмі NotVirt у компілятора немає проблем з виразом.
|
|
| | | | Він завжди компілює виклик функції show() з базового класу. Проте в програмі VIRT компілятор не знає, до якого класу відноситься вміст ptr. Адже це може бути адреса об'єкту як класу Derv1, так і класу Derv2. Яку саме версію draw() викликає компілятор - теж загадка. Насправді компілятор не дуже розуміє, що йому робити, тому відкладає ухвалення рішення до фактичного запуску програми. А коли програма вже поставлена на виконання, коли відомо, на що указує ptr, тоді буде запущена відповідна версія draw. Такий підхід називається пізнім скріпленням або динамічним скріпленням. (Вибір функцій в звичайному порядку, але час компіляції, називається раннім скріпленням або статичним скріпленням.) Пізнє скріплення вимагає більше ресурсів, але дає виграш в можливостях і гнучкості.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Поиск по сайту:
|