
- •Курсова робота
- •Завдання
- •1. Пояснювальна записка
- •2. Розрахункова частина
- •3. Позитивні сторони _______________________________________
- •1. Абстрагування
- •2. Інкапсуляція
- •3. Успадкування
- •3.1 Загальні поняття
- •3.2 Одиночне успадкування
- •4. Поліморфізм
- •4.1 Загальні поняття
- •4.2 Поліморфізм і його реалізація через віртуальні функції
- •4.3 Абстрактні та віртуальні базові класи
- •4.4 Перевантаження функцій і операцій
- •5. Класи
- •5.1 Інтерфейс і реалізація в класі
- •5.2 Конструктори і деструктори
- •7. Динамічний розподіл пам’яті
- •8.Висновок
- •9.Список використаної літератури
- •Додаток 1. Лістинг програми
- •Додаток 2. Результати роботи програми
- •Додаток 3. Cd – диск з програмою
3.2 Одиночне успадкування
Клас може мати «підкласи», спеціалізовані, розширені версії надкласу. Можуть навіть утворюватись цілі дерева успадкування. Наприклад, клас Собака може мати підкласи Коллі, Пекінес, Вівчарка і т.п. Так, Сірко може бути екземпляром класу Вівчарка. Підкласи успадковують атрибути та поведінку своїх батьківських класів, і можуть вводити свої власні. Успадкування може бути одиничне (один безпосередній батьківський клас) та множинне (кілька батьківських класів). Це залежить від вибору програміста, який реалізовує клас та мови програмування.
Множинне успадкування — властивість деяких об'єктно орієнтовних мов програмування, в яких класи можуть успадкувати поведінку і властивості більш ніж від одного суперкласу (безпосереднього батьківського класу). Це відрізняється від простого успадкування, у випадку якого клас може мати тільки один суперклас.
Одиничне успадкування — властивість деяких об'єктно орієнтовних мов програмування, в яких класи можуть успадкувати поведінку і властивості тільки від одного класу.
4. Поліморфізм
4.1 Загальні поняття
Поліморфізм — концепція в програмуванні, відповідно до якої використовується спільний інтерфейс для обробки даних різних спеціалізованих типів. Поліморфізм - можливість об'єктів з однаковою специфікацією мати різну реалізацію. Мова програмування підтримує поліморфізм, якщо класи з однаковою специфікацією можуть мати різну реалізацію - наприклад, реалізація класу може бути змінена в процесі успадкування.
У контексті об'єктно-орієнтованого програмування найпоширенішим різновидом поліморфізму є здатність екземплярів підкласу грати роль об'єктів батьківського класу, завдяки чому екземпляри підкласу можна використовувати там, де використовуються екземпляри батьківського класу.
Поліморфізм — один з трьох найважливіших механізмів об'єктно-орієнтованого програмування. Поліморфізм дозволяє писати більш абстрактні програми і підвищити коефіцієнт повторного використання коду.
Спільні властивості об'єктів об'єднуються в систему, яку можуть називати по різному: інтерфейс, клас. Спільність має зовнішнє і внутрішнє вираження. Зовнішня спільність проявляється як однаковий набір методів з однаковими іменами і сигнатурами (типами аргументів і результатів).Внутрішня спільність є однакова функціональність методів. Її можна описати інтуїтивно виразити у вигляді строгих законів, правил, яким повинні підкорятись методи. Можливість приписувати різну функціональність одному методу (функції, операції) називається перевантаженням методу.
4.2 Поліморфізм і його реалізація через віртуальні функції
Поліморфізм - основоположна концепція об'єктно-орієнтованого програмування Віртуальна функція - це функція, оголошена з ключовим словом virtual в базовому класі і перевизначена в одному або в декількох похідних класах. Віртуальні функції є особливими функціями, тому що при виклику об'єкта похідного класу за допомогою вказівника або посилання на нього С ++ визначає під час виконання програми, яку функцію викликати, грунтуючись на типі об'єкта. У мові С++ ключове слово virtual надає функції можливість стати поліморфічною, якщо вона буде переписана (перевизначена) в одному класі-нащадку або більше. Однак слово virtual аж ніяк не є необхідним, так як будь-яка функція, перевизначення в класі-нащадку, може бути поліморфічною. Компілятору тільки потрібно генерувати код для істинно поліморфічних процедур.
Якщо автор батьківського класу в мові С ++ не передбачає, що клас-нащадок захоче перевизначити функцію, то він не зможе зробити її і поліморфічною.
С++ також дозволяє функціям бути перевантаженими, в такій ситуації виклик потрібної функції залежить від аргументів. Різниця між перевантаженими і поліморфічне (перевизначеними) функціями полягає в тому, що в перевантажених функціях потрібна, визначається при компіляції, а в разі поліморфічною визначається при виконанні.
Коли батьківський клас проектується програмістом, то доводиться тільки здогадуватися, чи може бути функція перевизначена або перевантажена. Клас-нащадок здатний перевантажувати функцію в будь-який час, але це не відповідає більш важливого механізму поліморфізму, коли автор батьківського класу повинен точно задавати, що процедура буде віртуальною.