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


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


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


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


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


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


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


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


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


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



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

За допомогою перевизначення функції print() ми досягли того, щоб для об'єктів різних класів викликалися різні функції. Але чи завжди це буде вірно. Насправді, це лише ілюзія. Переконаймося в цьому, написавши зовнішню функцію, яка отримує параметр базового класу по посиланню і в своєму тілі просто запускає функцію print(). Викликавши цю функцію для об'єктів базового і похідного класів, за допогомою принципу підстановки ми один раз викличемо її для базового об'єкта, а інший раз - для похідного (який в узагальненні і є базовом, наприклад, спортсмен є людиною). Але чи спрацює функція print() по-різному? Насправді, ні. Тому що зв'язування відбулось на етапі трансляції, і виклик функції зв'язався з тілом базового методу. І працюватиме базовий метод для будь-яких вхідних параметрів.

 

#include <iostream.h> #include <conio.h>   class Base //базовий клас { public: 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); // працює базовий метод !!!   getch(); return 0; }


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

  1. I. Доповнення до параграфу про точкову оцінку параметрів розподілу
  2. II. Із програм для 11 класу
  3. N байки (з 3 класу)
  4. Аналітичні параметри
  5. Аналітичні параметри
  6. Артеріальний пульс, основні параметри
  7. Будова, характеристики і параметри біполярного транзистора
  8. Важливим параметром конденсаторів є пробивна напруга конденсатора. Чим вона більша, тим надійніший конденсатор, тим більша енергія може сконцентруватись на ньому.
  9. Варіатори та їхні основні параметри
  10. Вибір довжини і параметра перехідної кривої
  11. Види передавальних пристроїв РЛС РТВ та їх параметри
  12. Визначення оптимальних параметрів системи.




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

<== попередня сторінка | наступна сторінка ==>
Крок 2. Перезавизначення успадкованих бать- ківських методів. | Крок 4. Віртуальні функції

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

  

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


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