У овом упутству научићемо да стварамо функције пријатеља и часове пријатеља у Ц ++ уз помоћ примера.
Сакривање података је основни концепт објектно оријентисаног програмирања. Ограничава приступ приватним члановима изван класе.
Слично томе, заштићеним члановима могу приступити само изведене класе и они су недоступни споља. На пример,
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
.