Void main(). a->Display(); // використання функції A::Display()

{

A * a = new A;

B * b = new B;

a->Display(); // використання функції A::Display()

b->Display(); // використання функції B::Display()

show(a); // використання функції A::Display()

show(b); // використання функції B::Display()

delete a,b;

}

 

Поліморфне поводження функції Display() у класах А та В не очевидно, якщо розглядати тільки функцію main(). Воно розглядається тільки у функції show(), у котрій неможливо знати, яка саме функція A->Display() або В->Display() буде викликатися. Якби не було слова virtual, то робота коду виглядала б таким чином:

 

show(a); // використання A::Display()

show(b); // використання A::Display()

 

У цьому випадку звертання до функції призводить до виклику A::Display().

Оголошення функції віртуальною не означає, що вона обов’язково буде перевизначатися в похідному класі. Щоб поширити поліморфне поводження функції униз по дереву спадкування, кожний похідний клас повинен оголосити ту саму функцію віртуальною.

У попередньому прикладі віртуальна функція В::Display() викликалася динамічно під час виконання функції show(). Отже, функція В::Display(), так сказати, віртуально перевизначила функцію А::Display().

Функція, оголошена в похідному класі перевизначає функцію в базовому класі тільки тоді, коли має те ж ім’я і працює з тією ж кількістю і типом аргументів, що і віртуальна функція базового класу. Якщо вони відрізняються хоча б одним аргументом, то функція в похідному класі є цілком новою і перевизначена не буде. Розглянемо дерево спадкування на рис. 4.1.

 

 

Рис. 4.1. Дерево спадкування

 

Дереву спадкування на рис.4.1. відповідає такий код:

 








Дата добавления: 2014-12-26; просмотров: 812;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.003 сек.