|
|||||||||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
ВІРТУАЛЬНІ ФУНКЦІЇ_________________________________________________________________
До механізму віртуальних функцій звертаються в тих випадках, коли в кожному похідному класі потрібний свій варіант деякої компонентної функції.
Коли використовуються віртуальні функції, програма, яка, здавалося б, викликає функцію одного класу, може у цей момент викликати функцію зовсім іншого класу. Класи, що включають такі функції, називаються поліморфними і грають особливу роль в ООП. Поліморфізм - одна з ключових особливостей об'єктно-орієнтованого програмування (ООП) разом з класами і спадкоємством. Щоб використовувати поліморфізм, необхідно виконувати деякі умови. § По-перше, всі класи (всі ці трикутнички, кулі і т. д.) повинні бути спадкоємцями одного і того ж базового класу. § По-друге, функція draw(), повинна бути оголошена віртуальною (virtual) в базовому класі.
Віртуальні функції надають механізм пізнього (відкладеного) або динамічного скріплення. Будь-яка нестатична функція базового класу може бути зроблена віртуальною, для чого використовується ключове слово virtual. Приклад. class base { public: virtual void print(){cout<<“nbase”;} ... }; class dir: public base { public: void print(){cout<<“ndir”;} }; void main() { base B,*bp = &B; dir D,*dp = &D; base *p = &D; bp ->print(); // base dp ->print(); // dir p ->print(); // dir } Таким чином, інтерпретація кожного виклику віртуальної функції через вказівник на базовий клас залежить від значення цього вказівника, тобто від типу об'єкту, для якого виконується виклик. Вибір того, яку віртуальну функцію викликати, залежатиме від типу об'єкту, на який фактично (у момент виконання програми) направлений вказівник, а не від типу вказівника. Віртуальними можуть бути тільки нестатичні функції-члени. Віртуальність успадковується. Після того, як функція визначена як віртуальна, її повторне визначення в похідному класі (з тим же самим прототипом) створює в цьому класі нову віртуальну функцію, причому специфікатор virtual може не використовуватися. Конструктори не можуть бути віртуальними, на відміну від деструкторів. Практично кожен клас, що має віртуальну функцію, повинен мати віртуальний деструктор. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.) |