Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Не підтверджено.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
3.08 Mб
Скачать
  1. Особливості використання покажчиків на об'єкти

Як було показано в попередньому розділі, доступ до структури можна отри­мати безпосередньо або через покажчик на цю структуру. Аналогічно можна звер­татися і до об'єкта: безпосередньо (як в усіх попередніх прикладах) або за допомо­гою покажчика на об'єкт. Щоб отримати доступ до окремого члена об'єкта вик­лючно "силами" самого об'єкта, використовують оператор "крапка". А якщо для цього слугує покажчик на цей об'єкт, то необхідно використовувати оператор "стрілка"1.

Щоб оголосити покажчик на об'єкт, використовується аналогічний синтаксис як і у разі оголошення покажчиків на значення інших типів. У наведеному нижче коді програми створюється простий клас pCIass, визначається об'єкт цього класу Obj і оголошується покажчик на об'єкт типу pCIass з іменем р. У наведеному нижче прикладі показано, як можна безпосередньо отримати доступ до об'єкта Obj і як

використовувати для цього покажчик (у цьому випадку ми маємо справу з непря­мим доступом).

Код програми 2.14. Демонстрація механізму використання покажчика на об'єкт #include <vcl>

#include <iostream> // Для потокового введення-виведення

#include <conio> // Для консольного режиму роботи

using namespace std; // Використання стандартного простору імен

// Оголошення класового типу

class pCIass { int num; public:

{cout «"num=" « num « endl;}

void Set(int n) {num = n;} void Show()

};

int mainO

{

pCIass Obj, *p; // Створення об'єкта класу і покажчика на нього.

0bj.Set(1); Obj.ShowO;

p = &Obj; p->Show(); getchQ; return 0

// Отримуємо прямий доступ до об'єкта Obj.

// Присвоюємо покажчику р адресу об'єкта ОЬІ.

// Отримуємо доступ до об'єкта ОЬІ за допомогою покажчика.

}

Зверніть увагу на те, що адреса об'єкта Obj отримується шляхом використання оператора посилання "&", що цілком відповідає механізму отриманню адреси для змінних будь-якого іншого типу.

Як було зазначено в попередніх розділах, інкрементація або декрементація покажчика відбувається так, щоб завжди вказувати на наступний або попередній елемент базового типу. Те саме відбувається і під час інкрементування або декре- ментування покажчика на об'єкт: він вказуватиме на наступний або попередній об'єкт. Щоби проілюструвати цей механізм, дещо модифікуємо наведену вище програму. Тепер замість одного об'єкта Obj оголосимо двоелементний масив Obj типу pCIass. Зверніть увагу на те, як інкрементуєгься та декрементуєгься покажчик р для доступу до двох елементів цього масиву.

Код програми 2.15. Демонстрація механізму інкрементування та декрементування покажчика на об'єкт

#include <vcl>

#include <iostream> // Для потокового введення-виведення

#include <conio> // Для консольного режиму роботи

using namespace std; // Використання стандартного простору імен

class pCIass { int num; public:

// Оголошення класового типу

void Set(int n) { num = n;}

void ShowO {cout«"num=" « num « endl;}

};

int mainO

{

pCIass Obj[2],*p;

0bj[0].set(10);

// Прямий доступ до об'єктів

0bj[1].set(20);

p = &Obj[0];

// Отримуємо покажчик на перший елемент.

p->Show();

// Відображаємо значення елемента ОЬДО] за допомогою покажчика.

p++;

// Переходимо до наступного об'єкта.

p->Show();

// Відображаємо значення елемента ОЬД1] за допомогою покажчика.

p--;

// Повертаємося до попереднього об'єкта.

p->ShowQ;

// Знову відображаємо значення елемента ОЬДО].

getchQ; return 0;

}

Ось ж виглядають результати виконання цієї програми: пит= 10 пит= 20 пит= 10

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

Посилання на об'єкти. На об'єкти можна посилатися так само, як і на зна­чення будь-якого іншого типу. Для цього не існує ніяких спеціальних настанов або обмежень. Але, як буде показано в наступному розділі, використання поси­лань на об'єкти дає змогу справлятися з деякими специфічними проблемами, які можуть трапитися під час роботи з класами.

Розділ 3. ОРГАНІЗАЦІЯ КЛАСІВ І ОСОБЛИВОСТІ РОБОТИ З ОБ'ЄКТАМИ

У цьому розділі розглянемо деякі особливості організації класів, спробуємо познайомитися з "дружніми" функціями, перевизначенням конструкторів, а також з механізмом передачі об'єктів функціям і їх повернення ними. Окрім цього, діз­наємося про наявність конструктора копії, який використовується при створенні копії об'єкта. Завершує цей розділ опис ключового слова this.