Johdanto ystävätoimintoon C ++: ssa

C ++ -ohjelman ainutlaatuinen piirre on, että se käyttää kapselointia pitämään tiedot kietoutuneina kaikkiin sen toimintatoimintoihin muodostaen yksittäisen kokonaisuuden. Tämä varmistaa, että tiettyyn tietoon pääsee vain sitä käyttäviä tehtäviä, ei millään muulla tämän luokan ulkopuolella olevalla tehtävällä. Siksi tapauksissa, joissa ulkopuolinen luokka saattaa joutua pääsemään kyseiseen tietoon, käytämme tätä erityistä toimintoa, jota kutsutaan ”ystäväksi”. Tiedämme, että käyttämällä avainsanoja, kuten “suojattu” ja “yksityinen”, emme pääse tietoihin sen menetelmän ulkopuolella. Mutta reaaliaikaisen sovelluksen vuoksi on monia tapauksia, joissa saatamme tarvita samoja yksityisiä / suojattuja tietoja ja jo ilmoitetun käyttäminen on aina parempana kuin sen luominen monta kertaa. Katsotaan tässä artikkelissa, kuinka ilmoittaa ja käyttää ystävätoimintoa C ++: ssa.

Ystävätoimintoa ilmoittamisen edessä on “ystävä” -sana-avain, kuten tässä näytetään:

Syntaksi :

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
)

Kuten yllä olevasta koodista käy ilmi, ystävätoiminto on ilmoitettava samassa luokassa, jossa suojattu tai yksityinen avainsana on ilmoitettu, jotta kyseiset tiedot ovat käytettävissä luokan ulkopuolella. Tämä toiminto voidaan antaa ilmoittaa kaikkialla koko ohjelmassa aivan kuten normaali C ++ -menetelmä. Toiminnon määritelmä ei vaadi avainsanoja, kuten ystäviä tai laajuuden erottelukäyttäjiä.

Esimerkkejä ystävätoiminnoista C ++ -ohjelmassa

Tarkastellaan ystävätoiminnan toimivuutta hiukan paremmin ottamalla muutamia esimerkkejä alla.

Esimerkki # 1

Koodi:

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

lähtö:

Tässä ystäväfunktio on addWeight () -menetelmä, joka on ilmoitettu painoluokassa. Kilo on paino-menetelmän sisällä ilmoitettu yksityinen avainsana, jota käytetään sen vuoksi addWeight-toimintoon. Tämä esimerkki oli vain esitellä ystävätoiminnon peruskäyttöä, vaikka täällä ei ole reaaliaikaista käyttöä. Tarkastelkaamme nyt syvällisesti joitain merkityksellisiä esimerkkejä.

Esimerkki 2

Koodi:

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

lähtö:

Tässä esimerkissä molemmilla luokilla FirstClass ja SecondClass on jaettu () ilmoitettu ystävätoimintoksi. Siksi tämä toiminto voi käyttää molempien luokan yksityisiä muuttujia koskevia tietoja. Tässä jako () -toiminnolla lisätään kahden objektin fnum ja snum yksityiset muuttujat first_num ja sec_num ja palautetaan arvonsa päämenetelmään.

Jotta tämä toimisi kunnolla, SecondClass-välityslähetys on tehtävä koodin mukaisesti, koska SecondClassiin viitataan FirstClass-ohjelmassa:

friend int divide(FirstClass, SecondClass);

Ystäväluokka: On ystäväluokka, kuten ystävätoiminto. Ystäväluokka voi käyttää myös luokan yksityisiä ja suojattuja muuttujia, koska se on sen ystävä.

Syntaksi :

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

Kuten yllä on esitetty, luokka kaksi on luokan yhden ystävä. Siksi luokka kaksi voi käyttää luokan yhden yksityisiä ja suojattuja muuttujia. Mutta luokka yksi ei pääse toisen luokan suojattuihin tai yksityisiin muuttujiin, koska tämä ei ole keskinäistä ystävyyttä. Keskinäisen ystävyyden vuoksi meidän pitäisi julistaa se nimenomaisesti. Samalla tavalla tätä luokan ystävyyttä ei peritä, mikä tarkoittaa, että luokka 2 ei saa olla luokan Yhden alaluokan ystävä, vaikka se olisikin luokan Ystävä.

Esimerkki 3

Koodi:

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

lähtö:

Tässä koodissa meillä on 2 luokkaa: kehäluokka, joka löytää kehän käyttämällä pituus- ja leveysarvoja. Muuttujat len, brd, kehä ja temp ovat kaikki luokan kehän yksityisiä muuttujia. Siksi meidän on tehtävä printClassista Perimeter-luokan ystävä. Tämä printClass käyttää kehäarvoa, joka on laskettu calcPerimeter () -toiminnossa kehäluokassa. Koska he ovat kaikki yksityisiä jäseniä, meidän on tehtävä printPerimeter Perimeter-luokan ystäväksi. Kun tämä on tehty, meidän on luotava pääluokkaan kuuluva objekti kehän laskemiseksi ja välitettävä tämä objekti printPerimeter-luokkaan kehän näyttämiseksi.

Ystävätoiminnon ominaisuudet C ++: ssa

  • Menetelmän ja luokan, jolle se on julistettu ystäväksi, ei tarvitse olla sama.
  • Koska se ei kuulu vastaavan luokan alaan, sitä ei voida kutsua objektia käyttämällä.
  • Sitä voidaan kutsua myös aivan kuten normaalia menetelmää edes käyttämättä kohdetta.
  • Se voi käyttää jäsenten nimiä suoraan suoraan käyttämällä objektinimeä ja pistejäsenoperaattoria yhdessä jäsennimen kanssa.
  • Rajoituksia ei ole, koska niiden sallitaan ilmoittavan joko yksityisessä tai julkisessa osassa.

johtopäätös

Kun otetaan huomioon kaikki edellä mainitut ominaisuudet ja esimerkit ystävätoiminnoista C ++: ssa, on myös oltava varovainen käyttäessäsi ystävän toimintoja lukuisilla toiminnoilla ja ulkoisilla luokilla, koska se saattaa vähentää eri luokkien kapseloinnin merkitystä olio-ohjelmointiin. Siksi se voi olla sekä siunaus että pettäjä ohjelmoijalle.

Suositeltava artikkeli

Tämä on opas ystävätoimintoon C ++: ssa. Tässä keskustellaan C ++: n Johdanto ystävätoiminnosta ja sen esimerkeistä sekä koodin toteutuksesta ja tuotosta. voit myös käydä läpi ehdotetut artikkelimme saadaksesi lisätietoja -

  1. Rekursiivinen toiminto C ++: ssa (esimerkit)
  2. C ++: n 11 tärkeintä ominaisuutta
  3. Koneoppimisen C ++ -kirjasto
  4. Hajautustoiminto C: ssä tyypeillä
  5. Hajautustoiminto PHP: ssä syntaksin kanssa