C ++ sõbra funktsioonid ja klassid (koos näidetega)

Selles õpetuses õpime näidete abil looma sõprade funktsioone ja sõbraklasse C ++ keeles.

Andmete varjamine on objektorienteeritud programmeerimise põhimõiste. See piirab eraisikute liikmete juurdepääsu väljastpoolt klassi.

Samamoodi saavad kaitstud liikmed juurde pääseda ainult tuletatud klasside kaudu ja neile ei pääse väljastpoolt. Näiteks,

 class MyClass ( private: int member1; ) int main() ( MyClass obj; // Error! Cannot access private members from here. obj.member1 = 5; )

Kuid C ++ -s on funktsioon, mida nimetatakse sõbrafunktsioonideks, mis rikub seda reeglit ja võimaldab meil liikmefunktsioonidele juurde pääseda väljaspool klassi.

Samamoodi on sõbrale klassi samuti, mida me õppida hiljem õpetamisel.

sõbra funktsioon funktsioonis C ++

Sõbrale funktsiooni pääseb era- ja kaitstud andmete klassi. Kuulutame sõbrafunktsiooni, kasutades friendklassi kehas asuvat märksõna.

 class className (… friend returnType functionName(arguments);… )

Näide 1: Sõbra funktsiooni töö

 // C++ program to demonstrate the working of friend function #include using namespace std; class Distance ( private: int meter; // friend function friend int addFive(Distance); public: Distance() : meter(0) () ); // friend function definition int addFive(Distance d) ( //accessing private members from the friend function d.meter += 5; return d.meter; ) int main() ( Distance D; cout << "Distance: " << addFive(D); return 0; )

Väljund

 Kaugus: 5

Siin addFive()on sõbrafunktsioon, millel on juurdepääs nii era- kui ka avalikele andmetele.

Kuigi see näide annab meile ettekujutuse sõbrafunktsiooni kontseptsioonist, ei näita see siiski mingit tähenduslikku kasutamist.

Sisukam kasutamine oleks kahe erineva klassi objektide opereerimine. Siis võib sõbrafunktsioon olla väga kasulik.

Näide 2: lisage kahte erinevat klassi liikmeid

 // Add members of two different classes using friend functions #include using namespace std; // forward declaration class ClassB; class ClassA ( public: // constructor to initialize numA to 12 ClassA() : numA(12) () private: int numA; // friend function declaration friend int add(ClassA, ClassB); ); class ClassB ( public: // constructor to initialize numB to 1 ClassB() : numB(1) () private: int numB; // friend function declaration friend int add(ClassA, ClassB); ); // access members of both classes int add(ClassA objectA, ClassB objectB) ( return (objectA.numA + objectB.numB); ) int main() ( ClassA objectA; ClassB objectB; cout << "Sum: " << add(objectA, objectB); return 0; )

Väljund

 Summa: 13

Selles programmis, ClassAja ClassBon deklareeritud add()sõbraks funktsiooni. Seega saab selle funktsiooniga juurde pääseda mõlema klassi privaatsetele andmetele.

Üks asi, mida tähele siin on sõbrale funktsiooni sees ClassAkasutab ClassB. ClassBSiinkohal pole me siiski määratlenud .

 // inside classA friend int add(ClassA, ClassB);

Selle toimimiseks vajame ClassBoma programmis edasist deklaratsiooni .

 // forward declaration class ClassB;

sõbraklass C ++ klassis

friendMärksõna abil saame kasutada ka sõbraklassi C ++ -s . Näiteks,

 class ClassB; class ClassA ( // ClassB is a friend class of ClassA friend class ClassB;… ) class ClassB (… )

Kui klass kuulutatakse sõbraklassiks, muutuvad kõik sõbraklassi liikmefunktsioonid sõbrafunktsioonideks.

Kuna see classBon sõbraklass, pääseme kõigile liikmetele juurde classAseestpoolt classB.

Kuid me ei pääse liikmetele ClassBsisse seestpoolt classA. Selle põhjuseks on asjaolu, et sõbrasuhe C ++ keeles antakse ainult, mitte võetakse.

Näide 3: C ++ sõbraklass

 // C++ program to demonstrate the working of friend class #include using namespace std; // forward declaration class ClassB; class ClassA ( private: int numA; // friend class declaration friend class ClassB; public: // constructor to initialize numA to 12 ClassA() : numA(12) () ); class ClassB ( private: int numB; public: // constructor to initialize numB to 1 ClassB() : numB(1) () // member function to add numA // from ClassA and numB from ClassB int add() ( ClassA objectA; return objectA.numA + numB; ) ); int main() ( ClassB objectB; cout << "Sum: " << objectB.add(); return 0; )

Väljund

 Summa: 13

Siin ClassBon sõber klass ClassA. Niisiis, ClassBtal on juurdepääs ettevõtte liikmetele classA.

Aastal ClassBoleme loonud funktsiooni, add()mis tagastab numA ja numB summa.

Kuna see ClassBon sõbraklass, saame luua objektid selle ClassAsisemusest ClassB.

Huvitavad Artiklid...