Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+ООП_Навч_посібник.doc
Скачиваний:
7
Добавлен:
01.07.2025
Размер:
6.58 Mб
Скачать

12.8. Покажчики на об'єкти

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

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

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

#include <vcl>

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

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

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

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

int num;

public:

void setNum(int num) {num = num;}

void showNum() { cout << "num= " << num << "\n"; }

};

int main()

{

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

P_ob.setNum(1); // Отримуємо прямий доступ до об'єкта P_ob.

P_ob.showNum();

p = &P_ob; // Присвоюємо покажчику p адресу об'єкта P_ob.

p->showNum(); // Отримуємо доступ до об'єкта P_ob

// за допомогою покажчика.

getch(); return 0;

}

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

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

Код програми 12.16. Демонстрація інкрементації та декрементації покажчика на об'єкт

#include <vcl>

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

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

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

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

int num;

public:

void setNum(int num) {num = num;}

void showNum(){ cout << "num= " << num << "\n"; }

};

int main()

{

pClass P_ob[2],*p;

P_ob[0].setNum(10); // Прямий доступ до об'єктів

P_ob[1].setNum(20);

p = &P_ob[0]; // Отримуємо покажчик на перший елемент.

p->showNum(); // Відображаємо значення елемента P_ob[0]

// за допомогою покажчика.

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

p->showNum(); // Відображаємо значення елемента P_ob[1]

// за допомогою покажчика.

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

p->showNum(); // Знову відображаємо значення елемента P_ob[0].

getch(); return 0;

}

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

num= 10

num= 20

num= 10

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

Посилання на об'єкти

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

Розділ 13. Робота з класами

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