C ++ funkcije i razredi prijatelja (s primjerima)

U ovom uputstvu naučit ćemo stvarati funkcije prijatelja i klase prijatelja na C ++ uz pomoć primjera.

Sakrivanje podataka temeljni je koncept objektno orijentiranog programiranja. Ograničava pristup privatnih članova izvan klase.

Slično tome, zaštićenim članovima mogu pristupiti samo izvedene klase i oni su nedostupni izvana. Na primjer,

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

Međutim, na C ++-u postoji značajka koja se naziva funkcije prijatelja koja krši ovo pravilo i omogućuje nam pristup funkcijama članova izvan klase.

Slično tome, postoji i razred prijatelja , koji ćemo naučiti kasnije u ovom vodiču.

prijatelj Funkcija u C ++

Prijatelj funkcija može pristupiti privatnim i zaštićene podatke klase. Deklariramo funkciju prijatelja pomoću friendključne riječi unutar tijela klase.

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

Primjer 1: Rad 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; )

Izlaz

 Udaljenost: 5

Ovdje addFive()je funkcija prijatelja koja može pristupiti i privatnim i javnim članovima podataka.

Iako nam ovaj primjer daje ideju o konceptu funkcije prijatelja, ne pokazuje smislenu upotrebu.

Značajnija uporaba bila bi operacija na objektima dviju različitih klasa. Tada funkcija prijatelja može biti od velike pomoći.

Primjer 2: Dodajte članove dva različita razreda

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

Izlaz

 Zbroj: 13

U ovom programu ClassAi ClassBdeklarirali ste add()kao funkciju prijatelja. Dakle, ova funkcija može pristupiti privatnim podacima obje klase.

Ovdje treba primijetiti da funkcija prijatelja unutar ClassAkoristi ClassB. Međutim, ClassBu ovom trenutku nismo definirali .

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

Da bi ovo uspjelo, potrebna nam je prethodna izjava o ClassBnašem programu.

 // forward declaration class ClassB;

prijatelj Razred na C ++

Također možemo koristiti klasu prijatelja na C ++ pomoću friendključne riječi. Na primjer,

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

Kad se klasa proglasi za razred prijatelja, sve funkcije člana klase prijatelja postaju funkcije prijatelja.

Budući da classBje razred prijatelja, svim članovima korisnika možemo pristupiti classAiznutra classB.

Međutim, ne možemo pristupiti članovima ClassBiznutra classA. To je zato što se odnos prijatelja u C ++-u samo odobrava, a ne uzima.

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

Izlaz

 Zbroj: 13

Evo, ClassBrazred prijatelja je ClassA. Dakle, ClassBima pristup članovima classA.

U ClassB, stvorili smo funkciju add()koja vraća zbroj numA i numB.

Budući da ClassBje razred prijatelja, možemo stvarati predmete ClassAiznutra ClassB.

Zanimljivi članci...