Віртуальні методи та поліморфізм
Віртуальні методи
Розглянемо клас Shape з методом name() оголошений та визначений наступним чином:
У цьому випадку, метод Shape::name()
оголошено з ключовим словом virtual
. Метод Shape::name()
є віртуальним методом. Зверніть увагу, що ключове слово virtual
використовують тільки при оголошенні методу класу (а не при визначенні реалізації методу). Для того, щоб продемонструвати, що дає віртуальний метод, успадкуємо від нього клас Circle:
Зверніть увагу: метод Circle::name() - віртуальний та перевизначений у класі Circle. Це означає, що коли ми створимо об'єкти відповідних класів, та викличемо метод name() - те, який з методів name() буде викликано (класу-батька чи класу-нащадка) буде визначено в процесі роботи програми в залежності від того, об'єкт якого класу це є.
Для того щоб пояснити сказане вище розглянемо приклад:
Якщо запустити цю програму, то ми побачимо наспупний вивід:
Тобто незважаючи на те, що circleRef це посилання на Shape, у процесі роботи програми було викликано саме метод Circle::name(), а не Shape::name().
Якщо би метод Shape::name() не був би віртуальним, то при виклику shapeRef.name() викликався би метод Shape::name() і ми би отримали вивід:
Таким чином: Виклик віртуального методу визначається динамічно в залежності від класу об'єкту. Клас який містить віртуальні методи називають поліморфним класом.
Навіщо нам потрібні віртуальні методи ми побачимо в кінці цього розділу. А зараз підсумуємо те, як можна створити віртуальний метод:
Абстрактні класи та чисто віртуальні методи
Поліморфізм
Корисні посилання
Last updated