
- •Концепції ооп
- •3 Класи. Формат оголошення класів. Специфікатори прав доступу. . Створення об’єктів. Доступ до елементів класу
- •Cтатичні члени класів і статичні класні функції
- •12. Поняття перевантаження функції . Правила перевантаження функції. Приклади перевантаження функції – методів класу ( конструкторів). Аргументи за замовчуванням .
- •Аргументи за замовчуванням
- •15. Статичні члени класу.
- •Cтатичні члени класів і статичні класні функції
- •26. Передача параметрів конструкторам базового класу. Навести приклади
- •31. Чисто віртуальні функції. Абстрактні класи. Навести приклади.
26. Передача параметрів конструкторам базового класу. Навести приклади
Передача управління конструктору базового класу здійснюється за допомогою конструкції ...(...):base(...){...}, яка розташовується в оголошенні конструктора похідного класу між заголовком конструктора і тілом. Після ключового слова base в дужках розташовується список значень параметрів конструктора базового класу. Очевидно, що вибір відповідного конструктора визначається типом значень в списку. Для створення об'єктів можна застосовувати конструктори трьох ступенів захисту: public – при створенні об'єктів в рамках даного простору імен, в методах будь-якого класу — члена даного простору імен; protected – при створенні об'єктів в рамках похідного класу, у тому числі при побудові об'єктів похідного класу, а також для внутрішнього використовування класом — власником даного конструктора; private – застосовується виключно для внутрішнього використовування класом-власником даного конструктора. – не успадковується.
27. Множинне наслідування. Віртуальні базові класи. Приклади застосування множиного наслідування
Множинне наслідування – це створення класу на основі двох чи більше класів.
Віртуальні базові класи
Ситуація, зображена на малюнку можлива тільки для мови С++, оскільки на ній вказаний прояв множинного успадкування. Для того, щоб не виникало проблем, необхідно описувати успадкування класів В і С, як віртуальне від класу А. Тоді при створення об’єктів класу D не буде дублюватися клас А.
28. Поліморфізм. Динамічний та статичний поліморфізми. Види зв’язування. Порівняння раннього зв’язування з пізнім.
Поліморфізм - концепція в 0910031000102000018програмуванні, відповідно до якої використовується спільний інтерфейс для обробки даних різних спеціалізованих 0208004000081%типів.
Статичний поліморфізм реалізовується через механізм перевантаження функцій та операторів і віртуальні калси; динамічний - через механізм віртуальних функцій. Надалі говоритиме про поліморфізм як про динамічний.
Існує два терміни, які завжди безпосередньо пов'язують з ООП, це - раннє (early binding) і пізнє зв'язування (late binding) функцій. Суть будь-якого зв'язування полягає в організації виклику подій-функцій. Якщо раннє зв'язування є характеристикою класичних структурних мов програмування, то пізнє зв'язування - є визнчальною рисою мов об'єктного програмування.
Порівняння: В С++ пізнє зв'язування визначається тим, що вихідний код не завжди явно вказує як буде виконуватись програма. Це пов'язане з механізмом звертання і виклику функцій. При пізньому звязуванні виклик функції лише позначається без точного вказування, яка саме функція буде викликатися. Код в момент виконання повинен вирішити, яка функція буде виконуватись.
29. Віртуальні функції . Вказівники на похідні класи.
Віртуальний метод або віртуальна функція — метод об'єкта в 09011010001110100200005010031000102000018об'єктно-орієнтованому програмуванні, різний для базового класу і класу нащадка.
Одним з вказівником являється this.
30. Віртуальні функції. Таблиця віртуальних функцій.
Віртуальна таблиця функцій, віртуальна таблиця методів (00030109118000000200англ. virtual method table, VMT, vtable) — механізм, що використовується реалізаціями 0900200010031000102000018мов програмування для підтримки динамічної диспетчеризації (або зв'язування методів під час виконання).
Віртуальна таблиця об'єкта буде містити адреси динамічно зв'язаних методів. Виклики методів здійснюються шляхом вибирання адреси методу з віртуальної таблиці об'єкта. Віртуальна таблиця одна й та сама для всіх об'єктів одного класу, і через це зазвичай спільно використовується ними. Об'єкти, що належать до класів, сумісних за типом (наприклад, що знаходяться на одній сходинці в ієрархії спадкування), будуть мати віртуальні таблиці з однаковим розміщенням: адреса даного віртуального методу буде знаходитись з одним і тим самим зсувом для всіх класів, сумісних за типом. Таким чином, при вибиранні адреси методу з даного зсуву віртуальної таблиці поверне метод відповідний дійсному класу об'єкта01111000180001000100811811001109%B%5D%22%5BHYPERLINK%20%22%22%5B1%5D%221HYPERLINK%20%22%22%5B1%5D%22%5D"[HYPERLINK "5D%22%5BHYPERLINK%20%22%22%5B1%5D%221HYPERLINK%20%22%22%5B1%5D%22%5D"1HYPERLINK "5D%22%5BHYPERLINK%20%22%22%5B1%5D%221HYPERLINK%20%22%22%5B1%5D%22%5D"]
Як правило компілятор створює окрему віртуальну таблицю для кожного класу. Коли об'єкт уже створений, вказівник на його віртуальну таблицю, який зветься вказівник віртуальної таблиці (00030109118000000200англ. virtual table pointer або 00030109118000000200англ. vpointer), додається як прихований член цього об'єкта (зазвичай як перший член 01111000180001000100811811001109%B%5D%22%5BHYPERLINK%20%22%22%5B2%5D%222HYPERLINK%20%22%22%5B2%5D%22%5D"[HYPERLINK "5D%22%5BHYPERLINK%20%22%22%5B2%5D%222HYPERLINK%20%22%22%5B2%5D%22%5D"2HYPERLINK "5D%22%5BHYPERLINK%20%22%22%5B2%5D%222HYPERLINK%20%22%22%5B2%5D%22%5D"]). Компілятор також генерує «прихований» код в 090011110101010031000102000018конструкторі кожного класу для ініціалізації цього вказівника свого об'єкта адресою відповідної віртуальної таблиці.