го, хоча останній є віртуальним
Лабораторна робота № 6
Тема: Віртуальні функції
Цілі роботи:
? дослідження поліморфізму;
? вивчення принципів пізнього зв'язування;
? вивчення віртуальних функцій;
? поліморфізм ad-hoc ;
? реалізація віртуальних функцій;
? вивчення абстрактних класів.
Завдання
Варіант 1
В
Створити абстрактний базовий клас Worker з віртуальною функцією нарахування зарплати. Створити похідні класи StateWorker, HourlyWorker і CommissionWorker, < span align = "justify"> в яких дана функція перевизначена.
# include namespace std; worker {: i; (double x) {i = x;} void func () {cout <<В«zarplata standartnogo rabochegoВ» <
}; stateworker: public worker {: (double x): worker (x) {} func () {cout <<В«zarplata stateworkerВ» <
horlyworker: public worker {: (double x): worker (x) {} func () {<<В«zarplata horlyworkerВ»; <
}}; communicationworker: public worker {: (double x): worker (x) {} func () {cout <<В«zarplata communicationworkerВ» < func (); = & d_ob1;> func (); = & d_ob2;> func (); = & d_ob3;> func (); 0;
}
клас шаблон віртуальний оператор
Контрольні запитання
) У загальному випадку поліморфізм являє собою здатність об'єкта змінювати форму. Якщо ви розділите цей термін на частини, то виявите, що поли означає багато, а морфізм відноситься до зміни форми. Поліморфний об'єкт, отже, являє собою об'єкт, який може приймати різні форми. Цей урок вводить поняття поліморфізму і розглядає, як використовувати поліморфні об'єкти всередині ваших програм для спрощення та зменшення коду. До кінця даного уроку ви освоїте такі основні концепції:
Поліморфізм являє собою здатність об'єкта змінювати форму під час виконання програми. + + спрощує створення поліморфних об'єктів.
Для створення поліморфних об'єктів ваші програми повинні використовувати віртуальні (virtual) функції.
Віртуальна (virtual) функція - це функція базового класу, перед ім'ям якої стоїть ключове слово virtual.
Будь похідний від базового клас може використовувати або перевантажувати віртуальні функції.
Для створення поліморфного об'єкта вам слід використовувати покажчик на об'єкт базового класу.
) Віртуальний метод (віртуальна функція) - в об'єктно-орієнтованому програмуванні метод (функція) класу, який може бути перевизначений в класах-спадкоємців так, що конкретна реалізація методу для виклику буде визначатися під час виконання. Таким чином, програмісту необов'язково знати точний тип об'єкта для роботи з ним через віртуальні методи: достатньо лише знати, що об'єкт належить класу або спадкоємцю класу, в якому метод оголошений. p align="justify"> Перевизначення методу (англ. Method overriding) в об'єктно-орієнтованому програмуванні - одна з можливостей мови програмування, що дозволяє підкласу або дочірньому класу забезпечувати специфічну реалізацію методу, вже реалізованого в одному з суперкласів або батьківських класів. Реалізація методу в підкласі перевизначає (замінює) його реалізацію в суперкласі, описуючи метод з тією ж назвою, що і у методу суперкласу, а також у нового методу підкласу повинні бути ті ж параметри або сигнатура, тип повертається результату, що і у методу батьківського класу
) При пізньому зв'язуванні адреси визначаються динамічно під час виконання програми, а не статично під час компіляції, як у традиційних компільованих мовах, в яких застосовується раннє зв'язування. Сам процес зв'язування полягає в заміні віртуальних функцій на адреси пам'яті. br/>