Funkcije in razredi prijateljev C ++ (z primeri)

V tej vadnici se bomo s pomočjo primerov naučili ustvarjati funkcije prijateljev in razrede prijateljev v jeziku C ++.

Skrivanje podatkov je temeljni koncept objektno usmerjenega programiranja. Omejuje dostop zasebnih članov zunaj predavanja.

Podobno lahko do zaščitenih članov dostopajo le izpeljani razredi in so od zunaj nedostopni. Na primer

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

Vendar pa v C ++ obstaja funkcija, imenovana prijateljske funkcije, ki krši to pravilo in nam omogoča dostop do funkcij članov zunaj razreda.

Podobno obstaja tudi razred prijateljev , ki se ga bomo naučili kasneje v tej vadnici.

prijatelj Funkcija v jeziku C ++

Funkcija prijatelja lahko dostopa do zasebnih in zaščitenih podatkov razreda. Funkcijo prijatelja razglasimo s friendključno besedo znotraj telesa razreda.

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

Primer 1: Delovanje prijatelja Funkcija

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

Izhod

 Razdalja: 5

Tu addFive()je funkcija prijatelja, ki lahko dostopa do zasebnih in javnih članov podatkov.

Čeprav nam ta primer daje predstavo o konceptu funkcije prijatelja, ne kaže nobene smiselne uporabe.

Bolj smiselna uporaba bi bila uporaba predmetov dveh različnih razredov. Takrat je lahko funkcija prijatelja zelo koristna.

2. primer: dodajte člane dveh različnih razredov

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

Izhod

 Vsota: 13

V tem programu, ClassAin ClassBso izjavili, add()kot funkcija prijatelje. Tako lahko ta funkcija dostopa do zasebnih podatkov obeh razredov.

Tu je treba opaziti, da funkcija prijatelja znotraj ClassAuporablja ClassB. Vendar ClassBv tem trenutku še nismo določili .

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

Da bi to delovalo, potrebujemo predhodno izjavo o ClassBnašem programu.

 // forward declaration class ClassB;

prijatelj Razred v jeziku C ++

Lahko uporabimo tudi razred prijateljev v jeziku C ++ z uporabo friendključne besede. Na primer

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

Ko je razred razglašen za razred prijatelja, vse članske funkcije razreda prijateljev postanejo prijateljske funkcije.

Ker classBgre za tečaj prijateljev, lahko do njega dostopamo classAod znotraj classB.

Vendar člani ne moremo dostopati ClassBod znotraj classA. Razlog za to, da je prijateljski odnos v jeziku C ++ odobren, ne pa tudi sprejet.

Primer 3: Razred prijatelja C ++

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

Izhod

 Vsota: 13

Tukaj ClassBje razred prijateljev ClassA. Torej, ClassBima dostop do članov classA.

V letu ClassBsmo ustvarili funkcijo, add()ki vrne vsoto numA in numB.

Ker ClassBgre za razred prijateljev, lahko ustvarjamo predmete ClassAznotraj ClassB.

Zanimive Članki...