C ++ drauga funkcijas un klases (ar piemēriem)

Šajā apmācībā mēs iemācīsimies izveidot draugu funkcijas un draugu nodarbības C ++ ar piemēru palīdzību.

Datu slēpšana ir objektorientētas programmēšanas pamatjēdziens. Tas ierobežo privātu locekļu piekļuvi ārpus klases.

Tāpat aizsargātiem dalībniekiem var piekļūt tikai atvasinātas klases, un tie nav pieejami no ārpuses. Piemēram,

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

Tomēr C ++ ir funkcija, ko sauc par drauga funkcijām, kas pārkāpj šo noteikumu un ļauj mums piekļūt dalībnieku funkcijām ārpus klases.

Līdzīgi ir arī draugu klase , kuru mēs uzzināsim vēlāk šajā apmācībā.

drauga funkcija C ++

Draugs funkcija var piekļūt privātos un aizsargātus datus klasi. Mēs paziņojam par drauga funkciju, izmantojot friendatslēgas vārdu klases ķermenī.

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

1. piemērs: Drauga funkcijas darbība

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

Rezultāts

 Attālums: 5

Šeit addFive()ir drauga funkcija, kas var piekļūt gan privāto, gan publisko datu dalībniekiem.

Lai gan šis piemērs dod mums priekšstatu par drauga funkcijas jēdzienu, tas neliecina par jēgpilnu lietojumu.

Jēdzīgāk izmantotu divu dažādu klašu objektus. Tieši tad drauga funkcija var būt ļoti noderīga.

2. piemērs: pievienojiet divu dažādu klašu locekļus

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

Rezultāts

 Summa: 13

Šajā programmā, ClassAun ClassBir deklarēti add()kā draugs funkciju. Tādējādi šī funkcija var piekļūt abu klašu privātajiem datiem.

Viena lieta, ko šeit pamanīt, ir drauga funkcija iekšpusē, ClassAizmantojot ClassB. Tomēr mēs ClassBšajā brīdī neesam definējuši .

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

Lai tas darbotos, ClassBmūsu programmā ir nepieciešama iepriekšēja deklarācija .

 // forward declaration class ClassB;

draugu klase C ++

Izmantojot friendatslēgvārdu, mēs varam izmantot arī draugu klasi C ++ . Piemēram,

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

Kad klase tiek pasludināta par draugu klasi, visas draugu klases dalībnieku funkcijas kļūst par drauga funkcijām.

Tā kā classBtā ir draugu klase, mēs varam piekļūt visiem dalībniekiem classAno iekšpuses classB.

Tomēr mēs nevaram piekļūt dalībniekiem ClassBno iekšpuses classA. Tas ir tāpēc, ka draugu attiecības C ++ tiek piešķirtas tikai, nevis ņemtas.

3. piemērs: C ++ draugu klase

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

Rezultāts

 Summa: 13

Šeit ClassBir draugu klase ClassA. Tātad, ClassBir piekļuve classA.

Gadā ClassBmēs esam izveidojuši funkciju, add()kas atgriež skaitļu un numB summu.

Tā kā ClassBtā ir draugu klase, mēs varam izveidot objektus ClassAiekšpusē ClassB.

Interesanti raksti...