Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП.doc
Скачиваний:
77
Добавлен:
07.03.2016
Размер:
1.78 Mб
Скачать

1.2.3 Вказівка this

Кожен об'єкт містить свій екземпляр полів класу. Методи класу знаходяться в пам'яті в єдиному екземплярі і використовуються всіма об'єктами спільно, тому необхідно забезпечити роботу методів з полями саме того об'єкту, для якого вони були викликані. Це забезпечується передачею у функцію прихованого параметра this, в якому зберігається константна вказівка на об'єкт, який викликав функцію. Вказівка this неявно використовується усередині методу для посилань на елементи об'єкту. У явному вигляді ця вказівка застосовується в основному для повернення з методу вказівки (return this;) або посилання (return *this;) на об'єкт. Для ілюстрації використання вказівки this додамо в приведений вище клас monstr новий метод, що повертає посилання на найбільшого (поле health) з двох монстрів, один з яких викликає метод, а інший передається йому як параметр (метод потрібно помістити в секцію public опису класу):

monstr & the_best(monstr &М)

{

if( health > М.health) return *this;

return M;

}

... monstr Vasia(50), Super(200);

// Новий об'єкт Best ініціалізувався значеннями полів Super:

monstr Best = Vasia.the_best(Super);

Вказівку this можна також застосовувати для ідентифікації поля класу у тому випадку, коли його ім'я збігається з ім'ям формального параметра методу. Інший спосіб ідентифікації поля використовує операцію доступу до зони видимості:

Void cure(int health, int ammo)

{

this->health += health; // Використання this

monstr::ammo += ammo; // Використання операції ::

}

1.3 Інкапсуляція та приховування інформації

1.3.1. Приховані дані

Мета об’єктно-орієнтованого програмування – відокремити реалізацію об’єкта від його використання. Це можна зробити за допомогою приховування даних.

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

  • користувачі класу ізолюються від реального представлення даних;

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

Для одержання цих переваг необхідно володіти поняттям видимості членів класу. Видимість дає можливість визначати, до яких членів класу можна одержати доступ. Якщо всі дані-члени класу приховані, як це робиться звичайно, ви повинні визначити ряд функцій-членів, використовуваних для доступу, зміни й опрацювання даних-членів. Ці функції-члени, доступні для користувача, називаються загальним інтерфейсом класу.

Щоб створити клас, використовуючи приховані дані, треба спочатку зрозуміти, як робити члени класу прихованими або видимими поза класом.

Головна мета класу – сховати якнайбільше інформації. Це накладає деякі обмеження на використання даних або коду усередині класу.

Існує три види використання класу:

  • самий клас;

  • звичайні користувачі;

  • похідні класи.

Кожне оголошення усередині класу неявно визначає привілеї доступу, у залежності від того, у якій секції воно з’являється. Існує три привілеї доступу (специфікатора доступу):

  1. private;

  2. public;

  3. protected.

Перші два специфікатори були розглянуті раніше.

Кожна секція в класі починається з приведених вище ключових слів.

Приклад:

class Apt

{

int aa;

void s(); // приватний по умовчанню

public:

double q; long n; // загальнодоступні

protected:

int mm; float r(int); // захищені

private:

char t; int ll(); // приватні

};

Будь-яке оголошення, що з’являється до ключового слова керування доступом, вважається приватним по умовчанню.