friend functions c
Дізнайтеся більше про функції друзів у C ++ на прикладах.
C ++ підтримує функцію інкапсуляції, в якій дані об'єднуються разом із функціями, що працюють на ній, щоб утворити єдину одиницю. Роблячи це, C ++ гарантує, що дані доступні лише функціям, що працюють на них, а не будь-кому за межами класу.
Це одна з відмінних особливостей С ++, яка зберігає дані та запобігає їх витоку у зовнішній світ.
=> Прочитайте навчальну серію Easy C ++.
Але в деяких додатках у режимі реального часу іноді нам може знадобитися доступ до даних за межами комплектного блоку. Наприклад, сторонній клас може захотіти отримати доступ до приватних та захищених даних класу C ++.
C ++ надає можливість доступу до приватних та захищених даних за допомогою спеціальної функції, яка називається функцією або класом “друг”, про яку ми поговоримо тут у цьому посібнику.
Що ви дізнаєтесь:
- Функція друга в C ++
- Приклад функції друга
- Клас друга
- Переваги / недоліки функції друга
- Висновок
- Рекомендована література
Функція друга в C ++
Функція 'друг' у C ++ - це функція, якій передує ключове слово 'друг'. Коли функцію оголошено другом, вона може отримати доступ до приватних та захищених даних членів класу.
Функція друга оголошується всередині класу за допомогою ключового слова friend, як показано нижче.
class className{ …… friend returnType functionName(arg list); };
Як показано вище, функція friend оголошена всередині класу, до приватних та захищених членів даних яких слід отримати доступ. Функцію можна визначити де завгодно у файлі коду, і нам не потрібно використовувати ключове слово friend або роздільну здатність області дії, оператор.
Є кілька моментів, про які слід пам’ятати під час реалізації функцій друзів у нашій програмі:
- Функцію друга можна оголосити в приватному або публічному розділі класу.
- Його можна викликати як звичайну функцію, не використовуючи об'єкт.
- Функція друга не входить до сфери застосування класу, товаришем якого вона є.
- Функція друга не викликається за допомогою об’єкта класу, оскільки вона не входить до сфери дії класу.
- Функція 'друг' не може безпосередньо отримати доступ до приватних та захищених даних членів класу. Він повинен використовувати об'єкт класу, а потім отримати доступ до членів за допомогою оператора крапки.
- Функцією друга може бути глобальна функція або член іншого класу.
Приклад функції друга
Давайте реалізуємо приклад програмування, щоб краще зрозуміти використання функції друзів.
#include #include using namespace std; class sample{ int length, breadth; public: sample(int length, int breadth):length(length),breadth(breadth) {} friend void calcArea(sample s); //friend function declaration }; //friend function definition void calcArea(sample s){ cout<<'Area = '< Вихід:
Площа = 150
У наведеній вище програмі ми маємо зразок класу з приватними членами по довжині та ширині. У нас є публічний конструктор, який ініціалізує значення довжини та ширини. Далі, у нас є функція для друзів “calcArea”, яка обчислює площу, беручи до уваги довжину та ширину.
Зверніть увагу, що calcArea є функцією друзів і не є частиною класу. У основній функції після створення об’єкта зразка класу ми передаємо його функції calcArea, яка обчислює площу та відображає значення.
Клас друга
Як і функції друзів, ми також можемо мати клас друзів. Клас друзів може отримати доступ до приватних та захищених членів класу, якому він є другом.
class A{ …… friend class B; }; class B{ …….. };
Як зображено вище, клас B є другом класу A. Отже клас B може отримати доступ до приватних та захищених членів класу A.
Але це не означає, що клас A може отримати доступ до приватних та захищених членів класу B. Зверніть увагу, що дружба не є взаємною, якщо ми не зробимо так.
Так само дружба класу не успадковується. Це означає, що оскільки клас B є другом класу A, він не буде другом підкласів класу A.
Візьмемо приклад програмування, щоб продемонструвати клас друзів.
#include #include using namespace std; class Area{ int length,breadth,area; public: Area(int length,int breadth):length(length),breadth(breadth) {} void calcArea(){ area = length * breadth; } friend class printClass; }; class printClass{ public: void printArea(Area a){ cout<<'Area = '< Вихід:
Площа = 150
що таке loadrunner при тестуванні програмного забезпечення
У цій програмі ми маємо два класи. Клас “Площа”, який обчислює площу, використовуючи параметри довжини та ширини. Зверніть увагу, що поля, площа, довжина та ширина - це всі приватні члени класу Area.
Наступним класом, який використовується, є “printClass”, який друкує площу, обчислену функцією calcArea у класі Area. Оскільки учасники приватні, нам потрібно зробити printClass другом класу Area.
Після цього в основній функції ми створюємо об’єкт класу Area, обчислюємо площу і передаємо об’єкт функції printArea класу printClass для відображення області.
Переваги / недоліки функції друга
Однією з переваг функції друга або класу є те, що ми можемо отримати доступ до приватних та захищених даних класу. Наприклад, якщо ми реалізуємо пов'язаний список, то ми можемо зробити клас пов'язаного списку другом класу вузлів і отримати доступ до його даних, оскільки пов'язаний список складається з вузлів.
Таким чином, у певній ситуації використання функції друга або класу може виявитися вигідним. Однак він має і деякі недоліки.
Однією з відмінних особливостей C ++ є інкапсуляція, тобто об'єднання даних та функцій, що працюють з цими даними, щоб жодна зовнішня функція чи клас не могли отримати доступ до даних. Але, дозволяючи функціям друзів або класу отримувати доступ до приватних членів іншого класу, ми фактично ставимо під загрозу функцію інкапсуляції.
Щоб цього запобігти, ми повинні бути обережними щодо використання дружніх функцій або класу. Ми повинні переконатись, що ми не повинні використовувати в нашій програмі занадто багато функцій і класів друзів, що буде повністю компрометувати інкапсуляцію.
Висновок
На цьому наш підручник з функції друзів та класів на C ++ завершується.
Читачі повинні бути дуже обережними під час використання класів та функцій друзів, оскільки це може бути благом для програміста; його також потрібно використовувати обережно, оскільки надмірне використання функцій та класів друзів може скомпрометувати функцію ООП інкапсуляції в нашій програмі.
У нашому майбутньому уроці ми детально дізнаємося про статичні функції в C ++.
=> Завітайте сюди, щоб вивчити C ++ з нуля.
Рекомендована література