Увод у функцију пријатеља у Ц ++

Јединствена карактеристика програма Ц ++ је та што он користи капсулацију да би се подаци замотавали заједно са свим оперативним функцијама да би формирали појединачни ентитет. То осигурава да се одређеним подацима може приступити само задацима који се раде на њему, а не било којим другим задатком изван ове класе. Према томе, у случајевима када би спољна класа могла да приступи овом конкретном подацима, користимо ову специфичну функцију која се зове функција „пријатељ“. Знамо да употребом кључних речи попут „заштићених“ и „приватних“ не можемо приступити тим подацима изван његове методе. Али због апликације у реалном времену, постоје многи случајеви у којима ће нам можда требати исти приватни / заштићени подаци и коришћење већ декларисаних података је увек пожељније од стварања више пута. Погледајмо како изјавити и користити Фриенд функцију у Ц ++ у овом чланку.

Пријатељској функцији приликом декларисања претходи кључна реч „пријатељ“ као што је овде приказано:

Синтакса :

class (
private
protected
friend (arguments list);
)
returnDatatype functionName(arguments list)(
//function from which protected and private keywords
//can be accessed from as this is a friend method of className
)
class (
private
protected
friend (arguments list);
)
returnDatatype functionName(arguments list)(
//function from which protected and private keywords
//can be accessed from as this is a friend method of className
)

Као што је приказано у горњем коду, функција пријатеља мора бити декларирана у истој класи у којој је заштићена или приватна кључна ријеч декларирана да би ти подаци били доступни изван класе. Ову функцију је дозвољено декларисати било где у целом програму, баш као и уобичајена метода Ц ++. Дефиниција функције не захтева кључне речи попут пријатеља или било ког оператора за разрешавање опсега.

Примери функције пријатеља у програму Ц ++

Хајде да мало боље проверимо како функционише функција пријатеља, узимамо неколико примера у наставку.

Пример # 1

Шифра:

/* C++ program which exhibits the working of friend function.*/
#include
using namespace std;
class Weight
(
private:
int kilo;
public:
Weight(): kilo(0) ( )
//Declaration of a friend function
friend int addWeight(Weight);
);
// Defining a friend function
int addWeight(Weight w)
(
//accessing private data from non-member function
w.kilo += 17;
return w.kilo;
)
int main()
(
Weight W;
cout<<"Weight: "<< addWeight(W);
return 0;
)

Излаз:

Овде је функција пријатеља метода аддВеигхт () која је декларисана у категорији тежине. Кило је приватна кључна реч декларисана у методи Веигхт која се након тога приступа из функције аддВеигхт. Овај пример је био само да се прикаже основна употреба функције пријатеља, иако овде нема употребе у стварном времену. Хајде да сада дубоко заронимо у неке значајне примере.

Пример бр. 2

Шифра:

#include
using namespace std;
// Forward declaration
class SecondClass;
class FirstClass (
private:
int first_num;
public:
FirstClass(): first_num(12) ( )
// Declaring a friend function
friend int divide(FirstClass, SecondClass);
);
class SecondClass (
private:
int sec_num;
public:
SecondClass(): sec_num(4) ( )
// Another friend declaration
friend int divide(FirstClass, SecondClass);
);
// Function divide() is the friend function of classes FirstClass and SecondClass
// that accesses the member variables first_num and sec_num
int divide(FirstClass fnum, SecondClass snum)
(
return (fnum.first_num / snum.sec_num);
)
int main()
(
FirstClass fnum;
SecondClass snum;
cout<<"The value got by dividing first by second number: "<< divide(fnum, snum);
return 0;
)

Излаз:

У овом примеру, и класе ФирстЦласс и СецондЦласс имају поделу () декларисану као пријатељску функцију. Отуда ова функција може приступити подацима приватних променљивих из обе класе. Овде се фунцтион () функција користи за додавање приватних променљивих фирст_нум и сец_нум два објекта фнум и снум и враћа вредност главној методи.

Да би ово правилно функционисало, потребно је урадити просљеђујућу декларацију за СецондЦласс као што је приказано у коду, јер се СецондЦласс у програму ФирстЦласс позива помоћу програма:

friend int divide(FirstClass, SecondClass);

Пријатељска класа: Постоји пријатељска класа баш као и функција пријатеља. Пријатељска класа такође може приступити и приватним и заштићеним варијаблама класе јер је она пријатељ.

Синтакса :

class One(
friend class Two;
);
class Two(
);
class One(
friend class Two;
);
class Two(
);
class One(
friend class Two;
);
class Two(
);

Као што је приказано горе, класа два је пријатељ прве класе. Отуда класа два може приступити приватним и заштићеним варијаблама класе једна. Али, класа 1 не може приступити заштићеним или приватним променљивим од класе две, јер то није обострано пријатељство. За узајамно пријатељство треба да се изричито изјаснимо. На исти начин, ово пријатељство класе није наслеђено што значи да класа два неће бити пријатељ поткласа класе један иако је пријатељ класе један.

Пример бр. 3

Шифра:

#include
#include
using namespace std;
class Perimeter(
int len, brd, perimeter, temp;
public:
Perimeter(int len, int brd):len(len), brd(brd)
()
void calcPerimeter()(
temp = len + brd;
perimeter = 2 * temp;
)
friend class printClass;
);
class printClass(
public:
void printPerimeter(Perimeter a)(
cout<<"Perimeter = "< )
);
int main()(
Perimeter a(10, 15);
a.calcPerimeter();
printClass p;
p.printPerimeter(a);
return 0;
)
#include
#include
using namespace std;
class Perimeter(
int len, brd, perimeter, temp;
public:
Perimeter(int len, int brd):len(len), brd(brd)
()
void calcPerimeter()(
temp = len + brd;
perimeter = 2 * temp;
)
friend class printClass;
);
class printClass(
public:
void printPerimeter(Perimeter a)(
cout<<"Perimeter = "< )
);
int main()(
Perimeter a(10, 15);
a.calcPerimeter();
printClass p;
p.printPerimeter(a);
return 0;
)

Излаз:

У овом коду имамо 2 класе: Класа периметра која проналази обод користећи вредности дужине и ширине. Променљиве лен, брд, периметар и темп све су приватне променљиве периметра класе. Стога морамо направити принтЦласс пријатељем класе Периметар. Овај принтЦласс користи вриједност периметра израчунату у функцији цалцПериметер () у класи Периметер. Будући да су сви приватни чланови, морамо да направимо принтПериметер пријатељем класе Периметер. Након што је то учињено, морамо створити објект у главној класи да би израчунао обод и прослиједио тај објект групи принтПериметер да би се приказао Периметар.

Карактеристике функције пријатеља у Ц ++

  • Метода и класа којој је проглашен као пријатељ не морају бити исти.
  • Пошто није у домету одговарајуће класе, не може се позвати коришћењем његовог објекта.
  • Такође се може назвати као и уобичајена метода, чак и без употребе објекта.
  • Именима чланова може директно приступити само коришћењем његовог имена објекта и оператора тачканог чланства заједно са именом његовог члана.
  • Не постоји ограничење јер је дозвољено декларирање у приватном или јавном дијелу.

Закључак

Узимајући у обзир све горе описане карактеристике и примере функције пријатеља у Ц ++, такође морате бити пажљиви када користите пријатељеве функције са бројним функцијама и екстерним класама, јер то може умањити важност енкапсулације различитих класа у објектно оријентисано програмирање. Дакле, програмеру то може бити и благодат и драж.

Препоручени чланак

Ово је водич за функцију пријатеља у Ц ++. Овде смо разговарали о Уводу у Фриенд функцију у Ц ++ и његовим примерима, заједно са имплементацијом и излазом кода. такође можете да прођете кроз наше предложене чланке да бисте сазнали више -

  1. Рекурзивна функција у Ц ++ (примери)
  2. Топ 11 карактеристика Ц ++
  3. Машинско учење Ц ++ библиотеке
  4. Функција секирања у Ц са типовима
  5. Хасхинг функција у ПХП-у са синтаксом

Категорија: