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

ДОСТУП ДО ВІРТУАЛЬНИХ МЕТОДІВ ЧЕРЕЗ ВКАЗІВНИКИ__________________________________

Читайте также:
  1. Access.conf : файл доступа к серверу
  2. III Общий порядок перемещения товаров через таможенную границу Таможенного союза
  3. А) плечевой пояс проходит через грудную клетку; б) характерны анальные пузыри; в) зубы преобразовались в роговые пластины; г) уплощенные и широкие ребра.
  4. А. Стекание тока в землю через одиночные заземлители
  5. Аварійний (ловильний) інструмент для обертальних методів буріння.
  6. Адресна доступність
  7. Алекс встал перед съёмочной группой, надел ремень гитары через голову и поставил руку на струны.
  8. Алчность не может превратиться в не-алчность; через алчность нужно переступить. Вы не можете изменить ее.
  9. БИОЛОГИЧЕСКАЯ ДОСТУПНОСТЬ ЛЕКАРСТВЕННЫХ СРЕДСТВ
  10. Бог так благ каждый день, Песнь хвалы вложил Он в сердца людей. Бог так благ каждый день, Через тьму и ночь нам сияет свет. Бог так благ, Бог так благ каждый день.
  11. Большой помощью украинскому народу была продажа хлеба через пограничные города, т.к. 1648 год на Украине был неурожайным.
  12. Бумаге, подается не позднее, чем через один год с того момента,

 

Давайте зробимо одну маленьку зміну і наший програмі: поставимо ключове слово virtualперед оголошенням функції show()у базовому класі. Ось лістинг того, що вийшло - програми VIRT:
     

Лістинг 21.2. Програма VIRT

//Доступ до віртуальних функцій через вказівники

#include <iostream>

using namespace std;

/////////////////////////////////////////////

Class Base //Базовий клас

{

Public:

Virtual void show () //віртуальна функція

{ cout << “ Base \n”; }

};

/////////////////////////////////////////

Class Derv1: public Base //похідний клас 1

{

Public:

Void show () //звичайна функція

{ cout << “ Derv1 \n”; }

};

/////////////////////////////////////////

Class Derv2: public Base //похідний клас 2

{

Public:

Void show () //звичайна функція

{ cout << “ Derv2 \n”; }

};

///////////////////////////////////////////

Int main()

{

Derv1 dv1; //об’єкт похдіного класу 1

Derv2 dv2; //об’єкт похдіного класу 2

Base* ptr; //вказівник на базовий клас

ptr = &dv1; // адрес dv1 занести у вказівник

ptr -> show() //виконати show()

ptr = &dv2; // адрес dv2 занести у вказівник

ptr -> show() //виконати show()

return 0;

}

Результат: Derv1 Derv2,

Тепер, як бачите, виконуються методи похідних класів, а не базового. Ми змінили вміст ptrз адреси з класу Derv1на адресу з класу Derv2,і змінилося реальне виконання show(). Значить, один і той же виклик ptr -> show; ставить на виконання різні функції залежно від вмісту ptr. Компілятор вибирає функцію, що задовольняє тому, що занесене в покажчик, а не типу покажчика, як було в програмі Notvirt. Це показано на мал. 21.2.
     

Мал. 21.2. Доступ через вказівник до віртуальних функцій

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.)