Въведение в функцията приятел в C ++

Уникална характеристика на програмата C ++ е, че тя използва капсулиране, за да запази данните, обвити заедно с всичките си оперативни функции, за да състави отделна единица. Това гарантира, че конкретните данни могат да бъдат достъпни само от задачите, работещи върху него, а не от друга задача извън този клас. Следователно, в случаите, когато външният клас може да се нуждае от достъп до тези конкретни данни, ние използваме тази специфична функция, наречена функция „приятел“. Ние знаем, че използвайки ключови думи като „защитени“ и „частни“, ние не можем да получим достъп до тези данни извън метода му. Но в името на приложението в реално време има много случаи, в които може да се нуждаем от едни и същи частни / защитени данни и използването на вече декларирания такъв винаги е по-предпочитано от създаването му многократно. Нека да видим как да декларираме и използваме Friend функция в C ++ в тази статия.

Функцията приятел, докато декларирате, се предхожда с ключовата дума „приятел“, както е показано тук:

Синтаксис :

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
)

Както е показано в горния код, функцията friend трябва да бъде декларирана в същия клас, където е декларирана защитената или частната ключова дума, за да бъдат достъпни тези данни извън класа. Тази функция е позволена да бъде декларирана навсякъде в цялата програма, подобно на обикновен метод C ++. Дефиницията на функцията не изисква ключови думи като приятели или оператори за разделяне на обхвата.

Примери за функция на приятел в програма C ++

Нека да проверим работата на функцията на приятел малко по-добре, като вземем няколко примера по-долу.

Пример №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;
)

изход:

Тук функцията приятел е методът addWeight (), който е деклариран в класа на тегло. Kilo е частната ключова дума, декларирана в метода Weight, която след това се осъществява чрез функцията addWeight заради нея. Този пример беше просто да покаже основното използване на функция за приятел, въпреки че тук няма използване в реално време. Нека сега се потопим дълбоко в някои смислени примери.

Пример №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;
)

изход:

В този пример и класовете FirstClass и SecondClass имат деление (), декларирано като приятелска функция. Следователно тази функция може да получи достъп до данните на частните променливи и от двата класа. Тук функцията разделение () се използва за добавяне на частни променливи first_num и sec_num на два обекта fnum и snum и връща стойността си на основния метод.

За да функционира правилно, трябва да се направи препращаща декларация за SecondClass, както е показано в кода, тъй като SecondClass се реферира в FirstClass с помощта на програмата:

friend int divide(FirstClass, SecondClass);

Приятелски клас: Има приятелски клас точно като функцията приятел. Friend class може също така да получи достъп до частни и защитени променливи на класа, тъй като е приятел за него.

Синтаксис :

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

Както е показано по-горе, втори клас е приятел на първи клас. Следователно клас втори има достъп до частни и защитени променливи от клас първи. Но клас първи няма достъп до защитени или частни променливи от втори клас, защото това не е взаимно приятелство. За взаимно приятелство трябва да го заявим изрично. По същия начин това приятелство на класа не е наследствено, което означава, че клас втори няма да бъде приятел на подкласовете от клас първи, въпреки че е приятел от първи клас.

Пример №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 класа: Периметров клас, който намира периметъра, като използва стойностите за дължина и широчина. Променливите len, brd, периметър и temp са всички частни променливи от периметъра на класа. Следователно трябва да направим printClass приятел от клас Периметър. Този printClass използва стойността на периметъра, изчислена във функцията calcPerimeter () в клас Perimeter. Тъй като всички те са частни членове, трябва да направим printPerimeter приятел от клас Периметър. След като това е направено, трябва да създадем обект в основния клас, който да изчисли периметъра и да предадем този обект на класа printPerimeter, за да се покаже периметърът.

Характеристики на функцията Friend в C ++

  • Методът и класът, за който е обявен за приятел, не е необходимо да са еднакви.
  • Тъй като не е в обхвата на съответния клас, той не може да бъде извикан чрез използване на неговия обект.
  • Той може да бъде наречен също като нормален метод, дори без използване на обекта.
  • Той може директно да получи достъп до имената на членовете само като използва името на обекта си и оператора на точково членство, заедно с името на неговия член.
  • Няма ограничение, тъй като е позволено да се декларира в частна или публична част.

заключение

Като се имат предвид всички по-горе разгледани функции и примерите за функция на приятел в C ++, трябва също да бъдете внимателни, докато използвате функциите на приятел с множество функции и външни класове, тъй като това може да намали значението на капсулирането на различни класове в обектно-ориентирано програмиране. Следователно това може да бъде както благодат, така и бана за програмиста.

Препоръчителен член

Това е ръководство за функцията Friend в C ++. Тук обсъждаме функцията Въведение в приятел в C ++ и нейните примери, заедно с реализацията на кода и изхода. можете също да прегледате нашите предложени статии, за да научите повече -

  1. Рекурсивна функция в C ++ (Примери)
  2. Топ 11 функции на C ++
  3. Машинно обучение C ++ библиотека
  4. Функция на хеширане в C с типове
  5. Hashing функция в PHP със синтаксис