Класи-друзі (програмування)
Перейти до навігації
Перейти до пошуку
Дружні класи або Класи-друзі в C++ це такі класи, які можуть мати доступ до членів класу з модифікаторами "private" і "protected" того класу, в якому вони оголошені як друзі за допомогою ключового слова friend. [1]
Застосування[ред. | ред. код]
За допомогою дружніх класів, можна краще організувати інкапсуляцію і розмежувати доступ шляхом дозволу доступу до повного функціоналу класу лише певній частині коду, дозволяючи іншим бачити лише частину його API, в іншому випадку повинно було б відкривати публічний доступ до прихованої частини.[2] Це збільшення інкапсуляції відбувається за рахунок посилення зв'язку між класами. [3]
Приклад[ред. | ред. код]
class B {
friend class A; // Клас A є другом класу B
private:
int i;
};
class A {
public:
A(B b) {
b.i = 0; // доступ до приватного поля можливий
}
};
Властивості[ред. | ред. код]
- Дружба класів не є симетричною – Якщо клас
A
є другом класуB
, то класB
не є автоматично другом класуA
. - Дружба класів не є транзитивною – Якщо клас
A
є другом класуB
і класB
не є другом класуC
, то класA
не є автоматично другом класуC
. - Друзі не успадковуються – Якщо друг класу
Base
не є автоматично другом класуDerived
і навпаки; так само як і якщоBase
є другом іншого класу,Derived
не буде автоматично другом того класу і навпаки. - Доступ відкритий друзям класу успадковується – Друг класу
Derived
може доступатися до захищених членів класуDerived
, що був успадкований відBase
. Відзначимо однак, що друг класуDerived
матиме лише доступ до членів успадкованих від класуBase
до яких Derived сам має доступ, наприклад, якщоDerived
публічно успадковується відBase
,Derived
лише матиме доступ до захищених (і публічних) членів успадкованих відBase
, але не до приватних членів, і так само і друзі цього класу.
Див. також[ред. | ред. код]
Примітки[ред. | ред. код]
- ↑ Introduction to Object-Oriented Programming, P. Mueller. Архів оригіналу за 17 Лютого 2015. Процитовано 4 Лютого 2015.
- ↑ Архівована копія. Архів оригіналу за 4 Лютого 2015. Процитовано 4 Лютого 2015.
{{cite web}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання) - ↑ Архівована копія. Архів оригіналу за 4 Лютого 2015. Процитовано 4 Лютого 2015.
{{cite web}}
: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)
Посилання[ред. | ред. код]
- http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Flanguage%2Fref%2Fcplr043.htm
- http://www.cplusplus.com/doc/tutorial/inheritance/ [Архівовано 4 Лютого 2015 у Wayback Machine.]
Це незавершена стаття про програмування. Ви можете допомогти проєкту, виправивши або дописавши її. |
Цю статтю треба вікіфікувати для відповідності стандартам якості Вікіпедії. (лютий 2017) |