Класи-друзі (програмування)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

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

Див. також[ред. | ред. код]

Примітки[ред. | ред. код]

  1. Introduction to Object-Oriented Programming, P. Mueller. Архів оригіналу за 17 Лютого 2015. Процитовано 4 Лютого 2015.
  2. Архівована копія. Архів оригіналу за 4 Лютого 2015. Процитовано 4 Лютого 2015.{{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)
  3. Архівована копія. Архів оригіналу за 4 Лютого 2015. Процитовано 4 Лютого 2015.{{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)

Посилання[ред. | ред. код]