A ystäväluokka voi käyttää yksityisiä ja suojattuja jäseniä muista luokista, joissa se on ilmoitettu ystäväksi. Joskus on hyödyllistä antaa tietylle luokalle pääsy muiden luokkien yksityisiin ja suojattuihin jäseniin. Esimerkiksi LinkedList-luokalla voidaan sallia pääsy Noden yksityisille jäsenille.
Voimme ilmoittaa ystäväluokan C++:ssa käyttämällä ystävä avainsana.
tiedostojärjestelmä linuxissa
Syntaksi:
friend class class_name; // declared in the base class>

Ystäväluokka
Esimerkki:
C++
// C++ Program to demonstrate the // functioning of a friend class #include using namespace std; class GFG { private: int private_variable; protected: int protected_variable; public: GFG() { private_variable = 10; protected_variable = 99; } // friend class declaration friend class F; }; // Here, class F is declared as a // friend inside class GFG. Therefore, // F is a friend of class GFG. Class F // can access the private members of // class GFG. class F { public: void display(GFG& t) { cout << 'The value of Private Variable = ' << t.private_variable << endl; cout << 'The value of Protected Variable = ' << t.protected_variable; } }; // Driver code int main() { GFG g; F fri; fri.display(g); return 0; }> Lähtö
The value of Private Variable = 10 The value of Protected Variable = 99>
Huomautus: Voimme ilmoittaa ystäväluokan tai toiminnon missä tahansa perusluokan rungossa, olipa se yksityinen, suojattu tai julkinen lohko. Se toimii kaikki samalla tavalla.
Ystävätoiminto
Ystäväluokan tapaan ystävätoiminnolle voidaan myöntää erityinen käyttöoikeus luokan yksityisille ja suojatuille jäsenille C++:ssa. He eivät ole luokan jäsentoimintoja, mutta voivat käyttää ja manipuloida kyseisen luokan yksityisiä ja suojattuja jäseniä, koska heidät on julistettu ystäviksi.
Ystävätoiminto voi olla:
- Globaali toiminto
- Toisen luokan jäsenfunktio

Ystävätoiminto C++:ssa
Syntaksi:
friend return_type function_name (arguments); // for a global function or friend return_type class_name::function_name (arguments); // for a member function of another class>

Ystäväfunktion syntaksi
1. Globaali toiminto ystäväfunktiona
Voimme julistaa minkä tahansa globaalin funktion ystäväfunktioksi. Seuraava esimerkki osoittaa, kuinka globaali funktio määritellään ystäväfunktioksi C++:ssa:
Esimerkki:
C++ // C++ program to create a global function as a friend // function of some class #include using namespace std; class base { private: int private_variable; protected: int protected_variable; public: base() { private_variable = 10; protected_variable = 99; } // friend function declaration friend void friendFunction(base& obj); }; // friend function definition void friendFunction(base& obj) { cout << 'Private Variable: ' << obj.private_variable << endl; cout << 'Protected Variable: ' << obj.protected_variable; } // driver code int main() { base object1; friendFunction(object1); return 0; }> Lähtö
Private Variable: 10 Protected Variable: 99>
Yllä olevassa esimerkissä olemme käyttäneet globaalia funktiota ystäväfunktiona. Seuraavassa esimerkissä käytämme ystäväfunktiona toisen luokan jäsenfunktiota.
2. Toisen luokan jäsenfunktio ystäväfunktiona
Voimme myös ilmoittaa toisen luokan jäsenfunktion ystäväfunktioksi C++:ssa. Seuraava esimerkki osoittaa, kuinka toisen luokan jäsenfunktiota käytetään ystäväfunktiona C++:ssa:
mylivecricket.in
Esimerkki:
C++ // C++ program to create a member function of another class // as a friend function #include using namespace std; class base; // forward definition needed // another class in which function is declared class anotherClass { public: void memberFunction(base& obj); }; // base class for which friend is declared class base { private: int private_variable; protected: int protected_variable; public: base() { private_variable = 10; protected_variable = 99; } // friend function declaration friend void anotherClass::memberFunction(base&); }; // friend function definition void anotherClass::memberFunction(base& obj) { cout << 'Private Variable: ' << obj.private_variable << endl; cout << 'Protected Variable: ' << obj.protected_variable; } // driver code int main() { base object1; anotherClass object2; object2.memberFunction(object1); return 0; }> Lähtö
Private Variable: 10 Protected Variable: 99>
Huomautus : Järjestys, jossa määritämme toisen luokan ystäväfunktion, on tärkeä ja siitä tulee huolehtia. Meidän on aina määriteltävä molemmat luokat ennen funktion määritelmää. Siksi olemme käyttäneet luokan ulkopuolista jäsenfunktion määritelmää.
Ystävätoimintojen ominaisuudet
- Ystäväfunktio on C++:n erityinen funktio, jolla on etuoikeus siitä huolimatta, että se ei ole luokan jäsenfunktio. pääsy the yksityisiä ja suojattuja tietoja luokasta.
- Ystäväfunktio on luokan ei-jäsenfunktio tai tavallinen funktio, joka ilmoitetaan ystäväksi avainsanalla ystävä luokan sisällä. Ilmoittamalla toiminnon ystäväksi, funktiolle annetaan kaikki käyttöoikeudet.
- Avainsana ystävä sijoitetaan vain ystäväfunktion ja funktion määrittelyyn ei in funktion määrittely tai kutsu.
- Ystäväfunktiota kutsutaan tavalliseksi funktioksi. Sitä ei voi kutsua käyttämällä objektin nimeä ja pisteoperaattoria. Se voi kuitenkin hyväksyä objektin argumenttina, jonka arvoa se haluaa käyttää.
- Ystäväfunktio voidaan ilmoittaa missä tahansa luokan osassa, eli julkinen tai yksityinen tai suojattu.
Alla on muutamia esimerkkejä ystävätoiminnoista eri tilanteissa:
Toimintoystävällinen useille luokille
C++ // C++ Program to demonstrate // how friend functions work as // a bridge between the classes #include using namespace std; // Forward declaration class ABC; class XYZ { int x; public: void set_data(int a) { x = a; } friend void max(XYZ, ABC); }; class ABC { int y; public: void set_data(int a) { y = a; } friend void max(XYZ, ABC); }; void max(XYZ t1, ABC t2) { if (t1.x>t2.y) cout<< t1.x; else cout << t2.y; } // Driver code int main() { ABC _abc; XYZ _xyz; _xyz.set_data(20); _abc.set_data(35); // calling friend function max(_xyz, _abc); return 0; }> Lähtö
35>
Ystävätoiminto tarjoaa meille tavan päästä käsiksi yksityisiin tietoihin, mutta sillä on myös haittapuolensa. Seuraavassa on luettelo ystävätoimintojen eduista ja haitoista C++:ssa:
Ystävätoimintojen edut
- Ystävätoiminto voi käyttää jäseniä ilman luokan perimistä.
- Ystävätoiminto toimii siltana kahden luokan välillä käyttämällä heidän yksityisiä tietojaan.
- Sen avulla voidaan lisätä ylikuormitettujen käyttäjien monipuolisuutta.
- Se voidaan ilmoittaa joko julkisessa tai yksityisessä tai suojatussa osassa.
Ystävätoimintojen haitat
- Ystävätoiminnoilla on pääsy luokan yksityisiin jäseniin luokan ulkopuolelta, mikä rikkoo tietojen piilottamisen lakia.
- Ystäväfunktiot eivät voi tehdä jäsenissään ajonaikaista polymorfiaa.
Tärkeitä seikkoja ystävätoiminnoista ja luokista
- Ystäviä tulee käyttää vain rajoitettuihin tarkoituksiin. Liian monet funktiot tai ulkoiset luokat on ilmoitettu luokan ystäviksi, joilla on suojattu tai yksityinen pääsy tietoihin, mikä vähentää erillisten luokkien kapseloinnin arvoa olio-ohjelmoinnissa.
- Ystävyys on ei molemminpuolista . Jos luokka A on B:n ystävä, B:stä ei tule automaattisesti A:n ystävää.
- Ystävyys ei ole peritty. (Katso Tämä Lisätietoja)
- Ystävien käsite ei ole Javassa.