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


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


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


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


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


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


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


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


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


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



Контакти
 


Тлумачний словник
Авто
Автоматизація
Архітектура
Астрономія
Аудит
Біологія
Будівництво
Бухгалтерія
Винахідництво
Виробництво
Військова справа
Генетика
Географія
Геологія
Господарство
Держава
Дім
Екологія
Економетрика
Економіка
Електроніка
Журналістика та ЗМІ
Зв'язок
Іноземні мови
Інформатика
Історія
Комп'ютери
Креслення
Кулінарія
Культура
Лексикологія
Література
Логіка
Маркетинг
Математика
Машинобудування
Медицина
Менеджмент
Метали і Зварювання
Механіка
Мистецтво
Музика
Населення
Освіта
Охорона безпеки життя
Охорона Праці
Педагогіка
Політика
Право
Програмування
Промисловість
Психологія
Радіо
Регилия
Соціологія
Спорт
Стандартизація
Технології
Торгівля
Туризм
Фізика
Фізіологія
Філософія
Фінанси
Хімія
Юриспунденкция






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

Приклад 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. Бесіда за запитаннями.




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

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

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

 

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


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