Void main(). show(b); //використовується B::PrintOn()
{
B *b = new B;
C *c= new C;
show(b); //використовується B::PrintOn()
show(c); //використовується C::PrintOn()
delete b,c;
}
Клас А використовується винятково в якості базового для інших класів. Функція show(A*) у момент виконання базується на типі переданого їй об’єкта, визначає, яку використовувати функцію.
Клас, похідний від абстрактного, теж може бути абстрактним.
Якщо клас перевизначає будь-яку віртуальну функцію свого базового класу новою чистою віртуальною функцією, то він теж абстрактний. С++ потребує перевизначити у похідних класах усі чисті віртуальні функції. Відсутність перевизначеня чистої віртуальної функції призводить до помилки компіляції. Такий фрагмент коду ілюструє деякі проблеми, що виникають, якщо не перевизначити у похідному класі всі чисті віртуальні функції базового класу. Розглянемо просте дерево на рисунку 4.2.
Рис. 4.2. Похідний клас, що не перевизначає чистої
віртуальної функції базового класу
На рис.4.2. показано, що клас В, який породжений від А, не перевизначає чисту віртуальну функцію A::f(). От як виглядає відповідний код:
Дата добавления: 2014-12-26; просмотров: 654;