Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.О.П / ооп / 4_кол / Лекції / 17. Об'єктно-орієнтоване програмування, л.5.1 - 5.3.ppt
Скачиваний:
37
Добавлен:
30.05.2020
Размер:
871.94 Кб
Скачать

Обмеження доступу до даних і методів

класуДоступ до даних і методів класу ззовні може бути обмежений

Рекомендується забороняти доступ до даних класу в обхід його методів

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

public:private:protected:

Публічні (public) поля класу

Public-методы і дані класу визначають його інтерфейс

доступ до них можливий з будь-якої частини коди

необхідно розміщувати в public- розділ класу лише необхідний набір методів, що виконують високорівневі операції над об'єктом класу

Закриті (приватні)

поля класу

Private-дані і методи класу визначають його реалізацію

Доступ до них дозволений лише з методів даного класу

Рекомендується всі дані класу робити закритими, їх обробку здійснювати усередині методів

Закриті методи класу зазвичай використовуються прилюдними методами, вирішуючи внутрішні завдання класу

Захищені поля класу

Protected-дані і методи визначають інтерфейс для похідних класів

Доступ до них дозволений зсередини методів даного класу і всіх його нащадків

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

class Date

{

public:

void Next(); void Print();

private:

int year, month, day;

};

// Реалізація методів класу void Date::Print()

{

printf(“%d/%d/%d”, day, month, year);

}

void Date::Next()

{

// ...

}

Посилання на себе

У середині методів класу для звернення до даних класу можна використовувати їх імена

У метод класу неявно передається покажчик на об'єкт, для якого він викликається

Доступний даний покажчик по ключовому слову this

class ListItem

{

public:

void Append(ListItem *pItem)

{

pItem->m_pNext = this; m_pPrevious = pItem; m_pNext = NULL;

}

private:

ListItem *m_pNext; ListItem *m_pPrevious; int m_data;

};

Константні методи

У мові C++ методи об’єкту, які не змінюють його стан (його дані) можуть бути об’явлені константними

Наприклад, методи, що повертають значення певних полів даних

Змінити дані класу з константного методу не можна

Коли виникає необхідність в константних методах

Якщо об'єкт був оголошений як константа, або доступний по константному посиланню або покажчику на const, то викликати у нього можна лише константні методи

Це заставляє оголошувати методи константними скрізь, де це лише можливо

class IntArray

 

private:

 

 

 

 

{

 

int *m_pData;

 

 

 

 

public:

 

int m_numberOfItems;

 

 

 

 

};

 

 

 

int GetSize()const

 

void f(IntArray const& array)

 

 

 

{

 

 

 

 

return

 

{

 

 

m_numberOfItems;

 

int i = array.GetSize();

 

 

 

}

 

// можна

 

 

 

void ClearElements()

 

array.ClearElements();

 

 

 

{

 

// не можна -

 

 

 

delete [] m_pData;

 

неконстантні методи недоступні

 

 

 

m_pData = NULL;

 

}

 

 

 

m_numberOfItems = 0;

}