Відкрити головне меню

Дружні класи або Класи-друзі в 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, але не до приватних членів, і так само і друзі цього класу.

Див. такожРедагувати

ПриміткиРедагувати

ПосиланняРедагувати