- Дружня функція - це функція, яка не є частиною класу має доступ до всіх елементів з дружнього собі класу.
- Дружня функція оголошується всередині класу з модифікатором 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 і подальше опис буде зайвим Коротко кажучи: Після опису класу йде написання функцій. Другий Використання функцій, яка приймає тільки один параметр. При цьому функція спирається на клас A і отже заносить приймається параметр всередину того класу на який і спирається. Загалом обидві функції виконують одне і те ж дію, різниця в тому, що одна функція виконується як самостійна і незалежна від класу, при цьому ще й описана всередині private. При всіх цих обставин це не заважає їй працювати поза класом без посередників щоб відобразити приватний x я використовував звичайну функцію класу. Ця функція виступає в ролі посередника між програмою і класом Залишилося тільки те, що знаходиться всередині головної функції. Власне там не повинно виникнути питань. Різниця викликів видно неозброєним оком. При цьому перший варіант роботи те ж саме, що і другий.
Дружня функція - це функція, яка не є частиною класу має доступ до всіх елементів з дружнього собі класу.
Усередині класу оголошені
Першою написана функція, яка приймає деякий параметр N і приймає екземпляр класу, записує цей N в x всередину прийнятого екземпляра класу. Функція не спирається на клас і описана як самостійно-незалежна. Можливо це якраз завдяки ключовим словом friend перед прототипом цієї самої функції всередині класу. Ще раз зазначу, що таку функцію можливо описати всередині поля private
Друга ж функція спирається на певний клас і не може працювати з елементами з поля private без посередників
Загалом я прийшов до того що
Схожі статті