Лабораторна робота № 7
Тема:Спадкування з раннім зв’язуванням.
Мета: Розглянути спадкування з раннім зв’язуванням.
Теоретичні відомості:
Ієрархія класів в інформатиці означає класифікацію об'єктних типів, розглядаючи об'єкти як реалізацію класів (клас схожий на заготовку, а об'єкт - це те, що будується на основі цієї заготовки) і зв'язуючи різні класи відносинами на кшталт «наслідує», «розширює», «є його абстракцією »,« визначення інтерфейсу ».
Об'єктно-орієнтоване програмування розширює об'єктне програмування, вводячи відносини тип-підтип за допомогою механізму, що назване спадкуванням. Замість того, щоб заново реалізовувати спільні властивості, клас успадковує дані-члени і функції-члени батьківського класу. У мові C + + спадкування здійснюється за допомогою так званого породження похідних класів. Клас, властивості якого успадковуються, називається базовим, а новий клас - похідним. Всі безліч базових і похідних класів утворює ієрархію спадкування. Наприклад, в тривимірної комп'ютерної графіки класи OrthographicCamera і PerspectiveCamera зазвичай є похідними від базового Camera. Безліч операцій і даних, спільне для всіх камер, визначено в абстрактному класі Camera. Кожен похідний від нього клас реалізує лише відмінності від абстрактної камери, надаючи альтернативний код для успадкованих функцій-членів або вводячи додаткові члени. Якщо базовий і похідний класи мають спільний відкритий інтерфейс, то похідний називається підтипом базового. Так, PerspectiveCamera є підтипом класу Camera. У C + + існує спеціальне відношення між типом і підтипом, що дозволяє вказівником або посиланням на базовий клас адресувати будь-який з похідних від нього підтипів без втручання програміста. (Така можливість маніпулювати декількома типами за допомогою покажчика або посилання на базовий клас називається поліморфізмом.) Якщо дана функція: void lookAt (const Camera * pCamera); то ми реалізуємо lookAt (), програмуючи інтерфейс базового класу Camera і не турбуючись про те, на що вказує pCamera: на об'єкт класу PerspectiveCamera, на об'єкт класу OrthographicCamera або на об'єкт, що описує ще якийсь вид камери, який ми поки не визначили. При кожному виклику lookAt () їй передається адреса об'єкту, що належить до одного з підтипів Camera. Компілятор автоматично перетворює його в покажчик на відповідний базовий клас: / / Правильно: автоматично перетворюється на Camera * OrthographicCamera ocam; lookAt (& ocam); / / ... / / Правильно: автоматично перетворюється на Camera * PerspectiveCamera * pcam = new PerspectiveCamera; lookAt (pcam); Наша реалізація lookAt () не залежить від набору підтипів класу Camera, реально існуючих у додатку. Якщо згодом буде потрібно додати новий підтип або виключити існуючий, то змінювати реалізацію lookAt () не доведеться. Поліморфізм підтипів дозволяє написати ядро програми так, що воно не буде залежати від конкретних типів, якими ми маніпулюємо. Ми програмуємо відкритий інтерфейс базового класу придуманої нами абстракції, користуючись тільки посиланнями і покажчиками на нього. При роботі програми буде визначено фактичний тип адресується об'єкта і викликана відповідна реалізація відкритого інтерфейсу. Знаходження (або дозвіл) потрібної функції під час виконання називається динамічним зв'язуванням (dynamic binding) (за замовчуванням функції вирішуються статично під час компіляції). У C + + динамічне зв'язування підтримується за допомогою механізму віртуальних функцій класу. Поліморфізм підтипів і динамічне зв'язування формують основу об'єктно-орієнтованого програмування
Хід роботи
Створити ієрархію класів
Структури «Спорт клубу».
структури «Бібліотеки».
структури «Обувного магазину»
структури «Булочного магазину»
Структури «Мобільного магазину»
Тощо…