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

ДОСТУП ДО ЗВИЧАЙНИХ МЕТОДІВ ЧЕРЕЗ ВКАЗІВНИК___________________________________

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

Лістинг 21.1. Програма NotVirt

//notvirt.cpp

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

#include <iostream>

using namespace std;

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

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

{

Public:

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є спадкоємцями класу Base.У кожному з цих трьох класів є метод show(). У main() ми створюємо об'єкти класів Derv1і Derv2, а також покажчик на клас Base.Потім адресу об'єкту породженого класу ми заносимо в покажчик базового класу: ptr = &dv1; //Адреса об'єкту породженого класу заноситься в // вказівник базового Але постійте, а компілятор на нас не образиться за те, що ми привласнюємо адресу об'єкту одного типу покажчику на інший тип? Виявляється, навпаки - компілятор буде просто щасливий, тому що перевірка типів відпочиває в цій ситуації. Ми скоро зрозуміємо, чому. Річ у тому, що покажчики на об'єкти породжених класів сумісні за типом з покажчиками на об'єкти базового класу. Тепер добре б зрозуміти, яка же, власне, функція виконується в цій стрічці: ptr -> show; Це функція Base::show()або Derv1::show()?Знову ж таки, в останніх двох стрічках програми NotVirt ми привласнили покажчику адресу об'єкту, що належить класу Derv2, і знову виконали ptr -> show; Так яка ж з функцій show()реально викликається? Результат виконання програми дає просту відповідь: Base Base Як бачите, завжди виконується метод базового класу. Компілятор не дивиться на вміст покажчика ptr, а вибирає той метод, який задовольняє типу покажчика, як показало на мал. 21.1. Так, іноді саме це нам і потрібно, але таким чином не вирішити поставлену на початку цієї теми проблему доступу до об'єктів різних класів за допомогою одного виразу.
     

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


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

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



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