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


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


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


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


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


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


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


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


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


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



Контакти
 


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






Приклад 1

Вказівники на похідні класи

Тема 7 Динамічний поліморфізм

1. Вказівники на похідні класи

2. Віртуальні функції

 

Для підтримки динамічного поліморфізму використовуються віртуальні функції. В С + + поліморфізм підтримується двома способами. По-перше, при компіляції він підтримується за допомогою перевантаження операторів і функцій. По-друге, під час виконання програми ‑ за допомогою віртуальних функцій. Основою віртуальних функцій і динамічного поліморфізму є вказівники на похідні класи.

 

Розглянемо одну із особливостей вказівників – вказівник, оголошений на базовий клас або на будь-який клас, похідний від цього базового. Наприклад:

 

base * р; //вказівник базового класу

base base_ob; //об’єкт базового класу

derived derived_ob; //об’єкт похідного класу

//Природно, що вказівник р може вказувати на об’єкт базового класу

р = & base_ob; //вказівник р для об’єкта базового класу

//Крім базового класу вказівник р може вказувати на об’єкт похідного класу

р = & derived_ob; //вказівник р для об’єкта похідного класу

 

Як зазначено у коментарях, вказівник базового класу може вказувати на об’єкт будь-якого класу, похідного від цього базового і при цьому помилки невідповідності типів генеруватися не буде.

Для вказівки на об’єкт похідного класу можна скористатися вказівником базового класу, при цьому доступ може бути забезпечений тільки до тих об’єктів похідного класу, які були успадковані від базового. Пояснюється це тим, що базовий вказівник "знає" тільки про базовий клас і нічого не знає про нових членів, доданих у похідному класі.

Вказівник базового класу можна використовувати для вказівки на об’єкт похідного класу, але зворотний порядок недійсний. Вказівник похідного класу не можна використовувати для доступу до об’єктів базового класу.

Арифметика вказівників пов’язана з типом даних (тобто класом), який заданий при оголошенні вказівника. Таким чином, якщо вказівник базового класу вказує на об’єкт похідного класу, то він вже не буде вказувати на наступний об’єкт похідного класу. Цей вказівник буде вказувати на наступний об’єкт базового класу.

//Демонстрація вказівника на об’єкт похідного класу

# include <iostream.h>

class base

{

int x;

public:

void setx (int i) {x = i;}

int getx () {return x;}

};

class derived: public base

{

int y;

public:

void sety (int i) {у = i;}

int gety () {returnу;

}

void main ()

base * р; // Вказівник базового класу

base b_ob; // об’єкт базового класу

derived d_ob; // об’єкт похідного класу

//Використання вказівника р для доступу до об’єкта базового класу

р = & b_ob;

p‑> setx (10); // доступ до об’єкта базового класу

cout <<" Об’єкт базового класу х: “<<p‑> getx () <<”\n”;

//Використання вказівника р для доступу до об’єкта похідного класу

р = &d_ob; // вказує на об’єкт похідного класу

p‑> setx (99); / / доступ до об’єкта похідного класу

//так як вказівник р не можна використовувати для змінної у,

// робимо це безпосередньо

d_ob.sety (88);

cout <<" Об’єкт похідного класу х: “ << p‑> getx () << “ “;

cout <<"Об’єкт похідного класу y: “ << d_ob. gety () << “\n”;

}

 


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

  1. Абсолютні синоніми (наприклад, власне мовні й запозичені) в одному тексті ділового стилю вживати не рекомендується.
  2. Алгоритм однофакторного дисперсійного аналізу за Фішером. Приклад
  3. Базові та прикладні класифікації
  4. В чому полягає явище тунелювання через потенціальний бар’єр, наведіть приклади.
  5. Визначення і приклади
  6. Врахування витраті втрат електроенергії. Приклад складання електробалансу.
  7. Головною метою наукової діяльності в системі вищої освіти повинен стати розвиток фундаментальних та приклад­них досліджень.
  8. Деякі приклади застосування ППП
  9. Дієслова з префіксом дис-виражають значення ліквідації дії, названої безпрефіксним дієсловом, наприклад: гармонізувати – дисгармонізувати, асоціювати – дисасоціювати.
  10. Для одиничного і дрібносерійного виробництва норма витрати визначається як укрупнена, наприклад, на 1000 станко-годин роботи даного виду роботи устаткування
  11. Додаток И - Приклад виконання ремонтного креслення деталі
  12. Етикет – (прикріплювати) установлений порядок поведінки в товаристві, певному оточенні, наприклад, придворний етикет, дипломатичний етикет.




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

<== попередня сторінка | наступна сторінка ==>
Системи автоматизації аналізу інвестиційних проектів | Приклад 2

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

 

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


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