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


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


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


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


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


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


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


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


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


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



Контрольні запитання та завдання

Приклад 4

Приклад 3

//Ієрархічний порядок віртуальних функцій

class base

{

public:

int i;

base (int x) {i = x;}

virtual void func ()

{

cout <<" Виконання функції func () базовою класу: “

cout << i << ‘\ n’;

}

}

class derived1: public base

{

public:

derived1 (int x): base (x) {}

voidfunc ()

{

cout <<"Виконання функції func () класу derivedl: “

cout << i * i << “\n”;

}

};

class derived2: public base

{

public:

derived2 (int x): base (x) {}

//У класі derived2 функція func () не підмінюється

};

void main ()

{

base * p;

base ob (10);

derivedl d_obl (10);

derived2 d_ob2 (10);

p = &ob;

p‑> func {); //функція func () базового класу

р = & d_obl;

p‑> func (); //функція func () похідного класу derivedl

р = & d_ob2;

p‑> func (); //функція func () базового класу

}

 

Після виконання програми на екран виводиться наступне:

Виконання функції func () базового класу: 10

Виконання функції func () класу derivedl: 100

Виконання функції func () базового класу: 10

 

У цьому прикладі в класі derived2 функція func () не підмінюється. Коли вказівником р присвоюється адреса об’єкту d_ob2 і викликається функція func (), використовується версія функції з класу base, оскільки вона наступна у ієрархіі класів. Зазвичай, якщо віртуальна функція не перевизначена в похідному класі, використовується її версія з базового класу.

 

У наступному прикладі створюється вихідний базовий клас area, в якому зберігаються два розміри фігури. У ньому також оголошується віртуальна функція getarea (), яка, при її підміні у похідному класі, повертає площу фігури, вигляд якої задається в похідному класі. У цьому випадку визначення функції getarea () всередині базового класу задає інтерфейс. Конкретна реалізація залишається тим класам, які успадковують клас area. У цьому прикладі розраховується площа трикутника і прямокутника.

//Використання віртуальної функції для визначення інтерфейсу

class area

{

double diml, dim2; //розміри фігури

public:

void setarea (double dl, double 62)

{

diml = dl;

dim2 = d2;

}

void getdim (double &dl, double &d2)

{

dl = diml;

d2 = dim2;

}

virtual double getarea ()

{

cout <<"Необхідно підмінити цю функцію \n”;

return 0.0;

}

};

class rectangle: public area

{

public:

double getarea ()

{

double dl, d2;

getdim (d1, d2);

return dl * d2;

}

};

class triangle: public area

{

public:

double getarea ()

{

double dl, d2;

getdim (dl, d2);

return 0.5 * d1 * d2;

}

);

void main ()

{

area * p;

rectangle r;

triangle t;

r.setarea (3.3, 4.5);

t.setarea (4.0, 5.0);

Р = &r;

cout <<" Площа прямокутника: “ << P‑> getarea () <<‘\ n’;

р = &t;

cout <<" Площа трикутника: “ << P‑> getarea () << “\n”;

}

 

1. Що таке віртуальна функція?

2. Які функції не можуть бути віртуальними?

3. Як віртуальні функції допомагають реалізовувати динамічний поліморфізм?

4. Чи є правильним наступний фрагмент? Якщо ні, то чому?

class base

{

public:

virtual int f (int a) = 0;

//…

};

 

class derived: public base

{

public:

int f(int a, int b) {return a * b;}

//…

};

5. Чи успадковується віртуальність?

6. Що відрізняє віртуальні функції від перевантажених функцій?

 


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

  1. V. Завдання.
  2. VІ. Підсумки уроку і повідомлення домашнього завдання.
  3. Адаптація персоналу: цілі та завдання. Введення у посаду
  4. Адвокатура в Україні: основні завдання і функції
  5. АКТУАЛЬНI ПРОБЛЕМИ І ЗАВДАННЯ КУРСУ РОЗМIЩЕННЯ ПРОДУКТИВНИХ СИЛ УКРАЇНИ
  6. Актуальність і завдання курсу безпека життєдіяльності. 1.1. Проблема безпеки людини в сучасних умовах.
  7. Аналіз руху грошових коштів у контексті нової фінансової звітності Важливим завданням аналізу фінансового стану підприємства є оцінка руху грошових коштів підприємства.
  8. Аудит, його мета та завдання
  9. Багатокритеріальні завдання оптимального керування
  10. Багатокритерійні завдання і можливі шляхи їхнього рішення.
  11. Безпека життєдіяльності людини – найважливіше завдання людської цивілізації
  12. Бесіда за запитаннями.




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

<== попередня сторінка | наступна сторінка ==>
Приклад 2 | Поняття про комп’ютерний контроль та аудит

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

  

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


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