МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах
РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ" ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах Гендерна антидискримінаційна експертиза може зробити нас моральними рабами ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів
Контакти
Тлумачний словник Авто Автоматизація Архітектура Астрономія Аудит Біологія Будівництво Бухгалтерія Винахідництво Виробництво Військова справа Генетика Географія Геологія Господарство Держава Дім Екологія Економетрика Економіка Електроніка Журналістика та ЗМІ Зв'язок Іноземні мови Інформатика Історія Комп'ютери Креслення Кулінарія Культура Лексикологія Література Логіка Маркетинг Математика Машинобудування Медицина Менеджмент Метали і Зварювання Механіка Мистецтво Музика Населення Освіта Охорона безпеки життя Охорона Праці Педагогіка Політика Право Програмування Промисловість Психологія Радіо Регилия Соціологія Спорт Стандартизація Технології Торгівля Туризм Фізика Фізіологія Філософія Фінанси Хімія Юриспунденкция |
|
|||||||
Механізм пізнього зв'язуванняДля кожного класу (не об'єкта!), що містить хоча б один віртуальний метод, компілятор створює таблицю віртуальних методів (vtbl), у якій для кожного віртуального методу записана його адреса в пам'яті. Адреси методів утримуються в таблиці в порядку їхнього опису в класах. Адреса будь-якого віртуального методу має в vtbl одне й теж зміщення для кожного класу в межах ієрархії. Кожен об'єкт містить сховане додаткове поле посилання на vtbl, називане vptr. Воно заповнюється конструктором при створенні об'єкта (для цього компілятор додає в початок тіла конструктора відповідні інструкції). На етапі компіляції посилання на віртуальні методи заміняються на звертання до vtbl через vptr об'єкта, а на етапі виконання в момент звертання до методу його адреса вибирається з таблиці. Таким чином, виклик віртуального методу, на відміну від звичайних методів і функцій, виконується через додатковий етап одержання адреси методу із таблиці. Це трохи сповільнює виконання програми. Рекомендується робити віртуальними деструктори для того, щоб гарантувати правильне звільнення пам'яті з-під динамічного об'єкта, оскільки в цьому випадку в будь-який момент часу буде обраний деструктор, що відповідає фактичному типові об'єкта. Деструктор передає операції delete розмір об'єкта, що має тип size_t. Якщо об'єкт, що видаляється, є похідним і в ньому не визначений віртуальний деструктор, переданий розмір об'єкта може виявитися неправильним. Чіткого правила, по якому метод варто робити віртуальним, не існує. Можна тільки дати рекомендацію повідомляти віртуальними методи, для яких є імовірність, що вони будуть перевизначені в похідних класах. З іншого боку, при проектуванні ієрархії не завжди можна пророчити, яким образом будуть розширюватися базові класи (особливо при проектуванні бібліотек класів), а оголошення методу віртуальним забезпечує гнучкість і можливість розширення. Для пояснення останньої тези уявимо собі, що виклик методу draw здійснюється з методу переміщення об'єкта. Якщо текст методу переміщення не залежить від типу переміщуваного об'єкта (оскільки принцип переміщення всіх об'єктів однаковий, а для "отрисовки" викликається конкретний метод), перевизначати цей метод у похідних класах немає необхідності, і він може бути описаний як невіртуальний. Якщо метод draw віртуальний, метод переміщення зможе без перекомпіляції працювати з об'єктами будь-яких похідних класів - навіть тих, про які при його написанні нічого відомо не було. Віртуальний механізм працює тільки при використанні покажчиків або посилань на об'єкти. Об'єкт, визначений через покажчик або посилання й утримуючий віртуальний методи, називається поліморфним. У даному випадку поліморфізм полягає в тому, що за допомогою того самого звертання до методу виконуються різні дії в залежності від типу, на який посилається покажчик у кожен момент часу.
|
||||||||
|