Класи-друзі (програмування)
Дружні класи або Класи-друзі в 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
, але не до приватних членів, і так само і друзі цього класу.
Див. також
Примітки
Посилання
- 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/
Це незавершена стаття про програмування. Ви можете допомогти проєкту, виправивши або дописавши її. |