C ++ मित्र कार्य और कक्षाएं (उदाहरण के साथ)

इस ट्यूटोरियल में, हम उदाहरणों की मदद से C ++ में फ्रेंड फ़ंक्शंस और फ्रेंड क्लास बनाना सीखेंगे।

डेटा छिपाना ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग की एक मूलभूत अवधारणा है। यह कक्षा के बाहर से निजी सदस्यों की पहुंच को प्रतिबंधित करता है।

इसी प्रकार, संरक्षित सदस्यों को केवल व्युत्पन्न वर्गों द्वारा पहुँचा जा सकता है और बाहर से दुर्गम हो सकता है। उदाहरण के लिए,

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

हालाँकि, C ++ में एक सुविधा है जिसे फ्रेंड फ़ंक्शंस कहा जाता है जो इस नियम को तोड़ते हैं और हमें क्लास के बाहर से सदस्य फ़ंक्शंस एक्सेस करने की अनुमति देते हैं।

इसी तरह, एक मित्र वर्ग भी है, जिसे हम बाद में इस ट्यूटोरियल में सीखेंगे।

मित्र फ़ंक्शन C ++ में

एक मित्र फ़ंक्शन किसी वर्ग के निजी और संरक्षित डेटा तक पहुंच सकता है । हम friendकक्षा के शरीर के अंदर कीवर्ड का उपयोग करके एक फ्रेंड फंक्शन घोषित करते हैं ।

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

उदाहरण 1: मित्र का कार्य

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

आउटपुट

 दूरी: 5

यहां, addFive()एक मित्र फ़ंक्शन है जो निजी और सार्वजनिक दोनों डेटा सदस्यों तक पहुंच सकता है ।

हालांकि यह उदाहरण हमें एक फ्रेंड फंक्शन की अवधारणा के बारे में एक विचार देता है, लेकिन यह कोई सार्थक उपयोग नहीं दिखाता है।

एक अधिक सार्थक उपयोग दो अलग-अलग वर्गों की वस्तुओं पर काम कर रहा होगा। जब मित्र फ़ंक्शन बहुत मददगार हो सकता है।

उदाहरण 2: दो अलग-अलग वर्गों के सदस्यों को जोड़ें

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

आउटपुट

 योग: 13

इस कार्यक्रम में, ClassAऔर एक दोस्त समारोह के रूप में ClassBघोषित add()किया है। इस प्रकार, यह फ़ंक्शन दोनों वर्गों के निजी डेटा तक पहुंच सकता है ।

यहाँ एक बात ध्यान देने वाली है कि फंक्शन फंक्शन अंदर ClassAका उपयोग कर रहा है ClassB। हालाँकि, हमने ClassBइस बिंदु पर परिभाषित नहीं किया है ।

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

इस काम के लिए, हमें ClassBअपने कार्यक्रम में एक आगे की घोषणा की आवश्यकता है ।

 // forward declaration class ClassB;

मित्र वर्ग C ++ में

हम friendकीवर्ड का उपयोग करके C ++ में एक मित्र वर्ग का भी उपयोग कर सकते हैं । उदाहरण के लिए,

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

जब एक कक्षा को मित्र वर्ग घोषित किया जाता है, तो मित्र वर्ग के सभी सदस्य कार्य मित्र कार्य बन जाते हैं।

चूंकि classBमित्र वर्ग है, हम classAअंदर से सभी सदस्यों तक पहुँच सकते हैं classB

हालाँकि, हम ClassBअंदर से सदस्यों तक नहीं पहुँच सकते classA। ऐसा इसलिए है क्योंकि C ++ में मित्र संबंध केवल दिया गया है, लिया नहीं गया है।

उदाहरण 3: 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; )

आउटपुट

 योग: 13

यहाँ, ClassBएक मित्र वर्ग है ClassA। तो, ClassBके सदस्यों के लिए उपयोग किया है classA

में ClassB, हमने एक फ़ंक्शन बनाया है, add()जो numA और numB का योग देता है।

चूँकि ClassBमित्र वर्ग है, हम ClassAअंदर की वस्तुएँ बना सकते हैं ClassB

दिलचस्प लेख...