Функції та класи друзів на C ++ (з прикладами)

У цьому посібнику ми навчимося створювати функції друзів та класи друзів в C ++ за допомогою прикладів.

Приховування даних - основне поняття об’єктно-орієнтованого програмування. Це обмежує доступ приватних учасників поза межами класу.

Подібним чином захищені члени можуть отримати доступ лише похідні класи і недоступні ззовні. Наприклад,

 class MyClass ( private: int member1; ) int main() ( MyClass obj; // Error! Cannot access private members from here. obj.member1 = 5; )

Однак у C ++ є функція, яка називається дружніми функціями, яка порушує це правило і дозволяє нам отримувати доступ до функцій-членів поза класом.

Так само існує клас друзів , про який ми дізнаємось далі у цьому підручнику.

friend Функція в C ++

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

 class className (… friend returnType functionName(arguments);… )

Приклад 1: Робота друга Функція

 // C++ program to demonstrate the working of friend function #include using namespace std; class Distance ( private: int meter; // friend function friend int addFive(Distance); public: Distance() : meter(0) () ); // friend function definition int addFive(Distance d) ( //accessing private members from the friend function d.meter += 5; return d.meter; ) int main() ( Distance D; cout << "Distance: " << addFive(D); return 0; )

Вихідні дані

 Відстань: 5

Тут addFive()функція друзів, яка може отримати доступ як до приватних, так і до публічних членів даних.

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

Більш вагомим буде використання операцій на об’єктах двох різних класів. Ось тоді функція друга може бути дуже корисною.

Приклад 2: Додайте учасників двох різних класів

 // Add members of two different classes using friend functions #include using namespace std; // forward declaration class ClassB; class ClassA ( public: // constructor to initialize numA to 12 ClassA() : numA(12) () private: int numA; // friend function declaration friend int add(ClassA, ClassB); ); class ClassB ( public: // constructor to initialize numB to 1 ClassB() : numB(1) () private: int numB; // friend function declaration friend int add(ClassA, ClassB); ); // access members of both classes int add(ClassA objectA, ClassB objectB) ( return (objectA.numA + objectB.numB); ) int main() ( ClassA objectA; ClassB objectB; cout << "Sum: " << add(objectA, objectB); return 0; )

Вихідні дані

 Сума: 13

У цій програмі ClassAі ClassBоголошені add()як функції друзів. Таким чином, ця функція може отримати доступ до приватних даних обох класів.

Тут слід зауважити одне, що функція друга всередині ClassAвикористовує ClassB. Однак ClassBна даний момент ми не визначили .

 // inside classA friend int add(ClassA, ClassB);

Щоб це працювало, нам потрібна попередня декларація ClassBнашої програми.

 // forward declaration class ClassB;

друг Клас на C ++

Ми також можемо використовувати клас друга в C ++, використовуючи friendключове слово. Наприклад,

 class ClassB; class ClassA ( // ClassB is a friend class of ClassA friend class ClassB;… ) class ClassB (… )

Коли клас оголошено класом друга, всі функції-члени класу товари стають функціями друга.

Оскільки classBце клас друзів, ми можемо отримати доступ до всіх учасників classAзсередини classB.

Однак ми не можемо отримати доступ до членів ClassBзсередини classA. Це тому, що стосунки з друзями в C ++ надаються, а не беруться.

Приклад 3: Клас друга C ++

 // C++ program to demonstrate the working of friend class #include using namespace std; // forward declaration class ClassB; class ClassA ( private: int numA; // friend class declaration friend class ClassB; public: // constructor to initialize numA to 12 ClassA() : numA(12) () ); class ClassB ( private: int numB; public: // constructor to initialize numB to 1 ClassB() : numB(1) () // member function to add numA // from ClassA and numB from ClassB int add() ( ClassA objectA; return objectA.numA + numB; ) ); int main() ( ClassB objectB; cout << "Sum: " << objectB.add(); return 0; )

Вихідні дані

 Сума: 13

Ось ClassBклас друзів ClassA. Отже, ClassBмає доступ до членів classA.

У ClassB, ми створили функцію, add()яка повертає суму numA та numB.

Оскільки ClassBце клас друзів, ми можемо створювати об'єкти ClassAвсередині ClassB.

Цікаві статті...