Рекомендуємо, 2022

Вибір Редакції

Різниця між функцією Friend і класом Friend

Функція Friend і клас friend є методами, які використовуються для доступу до приватних членів класу за допомогою ключового слова friend. Спільною відмінністю між функцією друга і другом є те, що при використанні функції друга можна отримати доступ до приватних членів класу, але в другому класі доступні лише імена другого класу, а не приватні члени класу.

Функція, незалежно від того, чи використовується функція або клас, може негативно впливати на об'єктно-орієнтовані рамки, оскільки вона послаблює інкапсуляцію, яка проти об'єктно-орієнтованої парадигми. Це є причиною того, що функція "друг" повинна бути використана мудро, інакше вона може порушити приховування даних коду.

Ця функція друга не є ні комутативною, ні транзитивною . X є другом Y не робить висновок, що Y також є другом X. Якщо X є другом Y і Y є другом Z, не припускає, що X є другом Z.

Діаграма порівняння

Основа для порівнянняФункція другаДруг-клас
ОсновнийЦе функція, яка використовується з ключовим словом friend для надання доступу до функцій, які не є членами, приватним членам класу.Це клас, який використовується з ключовим словом friend для доступу до приватних членів іншого класу.
Передня деклараціяПотрібно використовувати.Не обов'язково.
ВикористовуйтеФункція «друг» може використовуватися в певній ситуації перевантаження оператора.Клас товариша може бути використаний, коли клас створюється у верхній частині іншого класу.

Визначення функції друга

Функція « друг» використовується для доступу до приватних і захищених членів класу, дозволяючи функції, що не є членом, отримувати доступ. У цьому типі функції ключове слово friend використовується до імені функції під час оголошення. Існують деякі обмежувальні умови, що застосовуються до функції друга. Перша умова полягає в тому, що функція friend не успадковується дочірнім класом. Друга умова полягає в тому, що специфікатор класу зберігання може не бути присутнім в функції friend, що означає, що він не може бути оголошений статичним і extern.

Функція friend не викликається об'єктом виклику класу. Прикладами функції friend є: глобальна функція, функція-член класу, шаблон функції може бути функцією friend. Давайте розберемося за допомогою прикладу.

 #include з використанням простору імен std; перший клас {int дані; public: спочатку (int i): data (i) {} недійсний дисплей (const first & a); }; void display (констант перший & a) {cout << "data =" < 

Визначення друга класу

Подібно до функції друга, ми можемо зробити один клас другом іншого класу, який називається класом друга . Так що клас друга може отримати доступ до приватних членів, визначених в іншому класі. Важливо пам'ятати, що клас друга може отримати доступ до імен, визначених в іншому класі, замість того, щоб успадкувати інший клас. Саме члени першого класу не можуть стати членами другого класу. Ці дружні класи рідко використовуються.

Клас товариша може бути оголошений більш ніж одним класом. Вона розглядається як короткий альтернативний метод для функції друга, оскільки за допомогою цього можна створити клас друга, який може отримувати доступ до всіх членів даних і функціонувати замість створення декількох функцій друга.

 #include з використанням простору імен std; class First {// Визначте клас другого класу Друг; public: Перший (): a (0) {} void print () {cout << "Результат" << a << endl; } private: int a; }; class Second {public: void change (Перший & yclass, int x) {yclass.a = x; }}; int main () // Вихідні дані Результат - 0 Результат - 5 

Ключові відмінності між функцією друга і класом друга

  1. Функція Friend - це функція, яка має доступ до приватних і захищених членів класу. Навпаки, клас friend - це клас, який допомагає отримати доступ до приватних членів класу.
  2. Функція друга оголошується включенням його прототипу всередину класу, переслідує його з ключовим словом friend. Аналогічно, клас друга також визначається за допомогою ключового слова friend.
  3. Форвардна декларація використовується в разі функції друга як проти, не треба використовувати її в класі друг.

Висновок

Функція «друг» потрібна, коли функція потребує доступу до двох або більше незалежних класів, внутрішніх членів. З іншого боку, клас друга потрібний, коли клас вимагає доступу до членів іншого класу. Коли багатофункціональна функція повинна бути другом цієї функції, у цьому випадку краще використовувати клас friend.

Top