Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Крок 4. Віртуальні функції

Що ж потрібно зробити для того, щоб досягнути бажаного результату - щоб при виклику функції Fun(X) відбувався виклик базового методу, а при Fun(Y) - виклик похідного методу? Саме для цього і використовуються віртуальні функції. Перед описом функції print() в базовому класі ставимо ключове слово virtual. Це означає, що в функції Fun зв'язування виклику функції print() з її тілом буде відбуватися динамічно ("пізнє зв'язування") на етапі виконання програми. Тому і будуть працювати різні методи для різних вхідних даних. В цьому і полягає механізм віртуальних функцій. Віртуальну функцію можна викликати і невіртуально, якщо вказати кваліфікатор класу.

?

#include <iostream.h> #include <conio.h>   class Base // базовий клас { public: virtual void print(); // віртуальна функція };   void Base::print() { cout<<endl<<"Base-print"<<endl; // базовий метод }   class Derive:public Base // похідний клас { public: void print(); };   void Derive::print() { cout<<endl<<"Derive-print"<<endl; // перевизначений метод }   void Fun(Base &M) // функція, що отримує об'єкт базового класу по посиланю { M.print(); // відбувається "пізнє" (динамічне) зв'язування, виклик віртуальної функції }   int main(int argc, char* argv[]) { Base X; // об'єкт базового класу Derive Y; // об'єкт похідного класу   X.print(); // виклик базового методу Y.print(); // виклик похідного методу   cout<<endl; Fun(X); // працює базовий метод Fun(Y); // працює похідний метод !!!   cout<<endl; Y.Base::print(); // невіртуальний виклик віртуальної функції, статичний виклик   getch(); return 0; }


Читайте також:

  1. Адвокатура в Україні: основні завдання і функції
  2. Алгоритм знаходження ДДНФ (ДКНФ) для даної булевої функції
  3. Але відмінні від значення функції в точці або значення не існує, то точка називається точкою усувного розриву функції .
  4. Аналіз коефіцієнтів цільової функції
  5. АРХІВНІ ДОВІДНИКИ В СИСТЕМІ НДА: ФУНКЦІЇ ТА СТРУКТУРА
  6. Асимптоти графіка функції
  7. Базальні ядра, їх функції, симптоми ураження
  8. Базові функції, логічні функції
  9. Банки як провідні суб’єкти фінансового посередництва. Функції банків.
  10. Банківська система та її основні функції
  11. Банківська система та її структура. Функції Центрального банку.
  12. Банківська система: сутність, принципи побудови та функції. особливості побудови банківської системи в Україн




Переглядів: 616

<== попередня сторінка | наступна сторінка ==>
Крок 3. Функція, яка отримує параметр базо- вого класу по посиланню | Структура видавництв

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.002 сек.