Bevezetés a C ++ barát funkciójához

A C ++ program egyedülálló tulajdonsága, hogy a beágyazás segítségével az adatokat az összes működési funkciójával együtt csomagolva tartja az egyes entitásokat. Ez biztosítja, hogy az adott adatokhoz csak az azon működő feladatok érhetők el, és ne az osztályon kívüli más feladatok. Ezért azokban az esetekben, amikor a külső osztálynak valószínűleg hozzáférnie kell ehhez az adathoz, ezt a „függő” funkciónak nevezett funkciót használjuk. Tudjuk, hogy olyan kulcsszavak használatával, mint a „védett” és a „privát”, nem férhetünk hozzá ezekhez az adatokhoz a módszerén kívül. De a valós idejű alkalmazás érdekében számos esetben szükség lehet ugyanazon magán / védett adatokra, és a már bejelentett adatok használata mindig jobb, mint többszörös létrehozásuk. Nézzük meg, hogyan deklarálhatjuk és használhatjuk a Friends Function funkciót a C ++ alkalmazásban ebben a cikkben.

A barát funkciót a deklarálás során a „barát” kulcsszó előzi meg, az itt látható módon:

Szintaxis :

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
)

Amint az a fenti kódban látható, a barát funkciót ugyanabban az osztályban kell deklarálni, ahol a védett vagy a privát kulcsszót bejelentették, hogy ezek az adatok az osztályon kívül hozzáférhetők legyenek. Ezt a funkciót a program egész területén bárhol deklarálhatjuk, csakúgy, mint egy normál C ++ módszer. A függvény meghatározása nem igényel kulcsszavakat, mint például barátok vagy hatókör-felbontó operátorok.

Példák a barát funkciójára a C ++ programban

Nézzünk egy kicsit jobban a barát funkciójának működéséről, néhány példa alapján.

1. példa

Kód:

/* 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;
)

Kimenet:

Itt a barát funkció az addWeight () módszer, amelyet a Súlyosztályon belül deklaráltak. A Kilo a Súly módszerben bejelentett privát kulcsszó, amelyet az addWeight funkcióból érnek el ezért. Ez a példa csak egy barát funkció alapvető használatának bemutatására szolgált, bár itt nincs valós idejű használat. Most mélyebbre merítsünk néhány értelmes példát.

2. példa

Kód:

#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;
)

Kimenet:

Ebben a példában mind az FirstClass, mind a SecondClass osztály osztja (), mint barát funkciót. Ez a funkció tehát mindkét osztályhoz hozzáférhet a magánváltozók adataihoz. Itt az osztás () függvényt adja hozzá az fnum és a snum két objektumának first_num és sec_num magánváltozóihoz, és visszaadja értékét a fő módszerhez.

Annak érdekében, hogy ez megfelelő módon működjön, a SecondClass számára előre kell nyilatkozatot tenni a kód szerint, mivel a SecondClass az első osztályban hivatkozik a program segítségével:

friend int divide(FirstClass, SecondClass);

Baráti osztály: Van egy barát osztály, akárcsak a barát funkció. A Friend Class szintén hozzáférhet az osztály privát és védett változóinak egyaránt, mivel barátja.

Szintaxis :

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

Mint fentebb látható, a második osztály az első osztály barátja. Ezért a második osztály hozzáférhet az első osztályú magán- és védett változókhoz. Az első osztály azonban nem férhet hozzá a második osztály védett vagy magánváltozóinak, mert ez nem kölcsönös barátság. A kölcsönös barátság érdekében ezt kifejezetten be kell jelentenünk. Ugyanígy, az osztály ez a barátsága nem öröklődik, ami azt jelenti, hogy a második osztály nem lehet az első osztály alosztályainak barátja, annak ellenére, hogy az első osztály barátja.

3. példa

Kód:

#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;
)

Kimenet:

Ebben a kódban 2 osztályunk van: Kerületi osztály, amely a hossz és szélesség értékének felhasználásával megtalálja a kerületet. A len, brd, kerület és temp változók mind az osztály kerületének privát változói. Ezért a printClass-t a Perimeter osztály barátjává kell tennünk. Ez a printClass a Perimet osztályban a calcPerimeter () függvényben kiszámított Kerület értéket használja. Mivel mind magántagok, a printPerimetert a Perimeter osztály barátjává kell tennünk. Miután ezt megtettük, létre kell hoznunk egy objektumot a fő osztályban a kerület kiszámításához, és ezt az objektumot át kell adnunk a printPerimeter osztályhoz a kerület megjelenítéséhez.

A Friend Function jellemzői a C ++-ban

  • A módszernek és az osztálynak, amelyhez barátként bejelentették, nem kell egyeznie.
  • Mivel nem tartozik az adott osztály hatálya alá, objektumának felhasználásával nem hívható fel.
  • Ugyanígy szokásos módszernek is nevezhető, még az objektum használata nélkül is.
  • Csak a tagnevekhez férhet hozzá közvetlenül az objektumnév és a dot tagsági operátor, valamint a tagnév használatával.
  • Nincs korlátozás, mivel megengedett a magán- vagy a nyilvános részben történő bejelentése.

Következtetés

Figyelembe véve az összes fent tárgyalt tulajdonságot és a barát funkcióinak példáit a C ++-ban, akkor is óvatosnak kell lennie, amikor a barát funkcióit számos funkcióval és külső osztályokkal használja, mivel ez csökkentheti a különféle osztályok beépítésének fontosságát az objektum-orientált programozásban. Ennélfogva ez egyaránt lehet áldás és megsértés a programozó számára.

Ajánlott cikk

Ez egy útmutató a C ++ felhasználói funkciójának. Itt tárgyaljuk a C ++ bevezetője a barátsághoz funkciót és annak példáit, valamint a kód implementációját és kimenetét. akkor is áttekintheti javasolt cikkeinket, hogy többet megtudjon -

  1. Rekurzív funkció C ++-ban (példák)
  2. A C ++ 11 legnépszerűbb tulajdonsága
  3. Gépi tanulás C ++ könyvtára
  4. Hash funkció C-ben típusokkal
  5. Hashing funkció a PHP-ben a Syntax-tal

Kategória: