C для початківців дружні функції перше знайомство, c для початківців

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

Здавалося б легке і зрозуміле визначення. Оголосив функцію всередині класу, дописав перед нею модифікатор friend і використовуй як звичайну і незалежну від класу функцію поза класом. Якщо ви зацікавлені в цій темі, то спробуйте застосувати таку теорію на практиці. Думаю переважна більшість спробували зіткнуться з проблемами.







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

Код C ++ Дружня функція і звичайна функція Класу

int x; // Приватний елемент з класу A

friend void get_x (int. A ); // Прототип дружньої функції для занесення в приватний x значення

void get_x (int); // Прототип звичайного методу для занесення значення в приватний x

void show (); // Прототип функції для відображення x з приватного поля

/ * Прототипи функцій визначені усередині класу. Самі функції описані поза * /

void get_x (int N. A obj_A) // Функція не є частиною класу, але працює немов є

obj_A. x = N; // в елемент x класу A передається приймається параметр N

void A. get_x (int N) // функція є частиною класу A

x = N; // в приватний елемент x класу A заноситься приймається в N параметр

void A. show () // Функція є частиною класу A і грає роль посередника

cout <

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






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

Так як елемент x був оголошений всередині private. то для відображення цього x необхідний посередник, в якості посередника працює функція show (). Функція show () оголошена всередині класу і значить все поля класу їй доступні. Я сподіваюся ви вивчили, що таке поле private і подальше опис буде зайвим

Коротко кажучи:
Усередині класу оголошені

  • Приватний елемент x
  • Дружня функція введення в x значення
  • Звичайна функція введення в x значення
  • Функція для відображення приватного елемента

Після опису класу йде написання функцій.
Першою написана функція, яка приймає деякий параметр N і приймає екземпляр класу, записує цей N в x всередину прийнятого екземпляра класу. Функція не спирається на клас і описана як самостійно-незалежна. Можливо це якраз завдяки ключовим словом friend перед прототипом цієї самої функції всередині класу. Ще раз зазначу, що таку функцію можливо описати всередині поля private

Другий Використання функцій, яка приймає тільки один параметр. При цьому функція спирається на клас A і отже заносить приймається параметр всередину того класу на який і спирається.

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

  • Функція friend може бути оголошена навіть всередині private і посередники їй не потрібні
  • Звичайна функція класу вимагає посередників для роботи з елементами з private

щоб відобразити приватний x я використовував звичайну функцію класу. Ця функція виступає в ролі посередника між програмою і класом

Залишилося тільки те, що знаходиться всередині головної функції. Власне там не повинно виникнути питань. Різниця викликів видно неозброєним оком.

  • У першому випадку звичайна функція приймає параметри і обробляє їх
  • У другому випадку обробляємо клас через відповідний об'єкт

При цьому перший варіант роботи те ж саме, що і другий.







Схожі статті