Ц ++ функције и часови пријатеља (са примерима)

У овом упутству научићемо да стварамо функције пријатеља и часове пријатеља у Ц ++ уз помоћ примера.

Сакривање података је основни концепт објектно оријентисаног програмирања. Ограничава приступ приватним члановима изван класе.

Слично томе, заштићеним члановима могу приступити само изведене класе и они су недоступни споља. На пример,

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

Међутим, у Ц ++-у постоји функција која се назива функције пријатеља која крши ово правило и омогућава нам приступ функцијама чланова изван класе.

Слично томе, постоји и час пријатеља , који ћемо научити касније у овом водичу.

фриенд Функција у Ц ++

Пријатељ функција може приступити приватне и заштићене податке класе. Декларишемо функцију пријатеља користећи 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;

пријатељ Класа на Ц ++

Такође можемо користити класу пријатеља у Ц ++ користећи friendкључну реч. На пример,

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

Када се класа прогласи за класу пријатеља, све чланске функције класе пријатеља постају функције пријатеља.

С обзиром да classBје то разред пријатеља, свим члановима корисника можемо приступити classAизнутра classB.

Међутим, не можемо приступити члановима ClassBизнутра classA. То је зато што се однос пријатеља у Ц ++-у само одобрава, а не узима.

Пример 3: Класа пријатеља Ц ++

 // 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()која враћа зброј нумА и нумБ.

Пошто ClassBје то класа пријатеља, можемо да креирамо објекте ClassAизнутра ClassB.

Занимљиви Чланци...