friend functions c
C ++ में मित्र कार्यों के बारे में अधिक जानें उदाहरणों के साथ।
C ++ एन्कैप्सुलेशन की सुविधा का समर्थन करता है जिसमें डेटा को एक इकाई बनाने के लिए उस पर काम करने वाले फ़ंक्शन के साथ एक साथ बंडल किया जाता है। ऐसा करने से C ++ सुनिश्चित करता है कि डेटा केवल उस पर काम करने वाले कार्यों द्वारा ही सुलभ हो और कक्षा के बाहर किसी के लिए न हो।
यह C ++ की विशिष्ट विशेषताओं में से एक है जो डेटा को संरक्षित करता है और इसे बाहरी दुनिया में लीक होने से रोकता है।
=> आसान सी ++ प्रशिक्षण श्रृंखला के माध्यम से पढ़ें।
लेकिन कुछ वास्तविक समय के अनुप्रयोगों में, कभी-कभी हम बंडल यूनिट के बाहर डेटा एक्सेस करना चाहते हैं। उदाहरण के लिए, एक बाहरी वर्ग C ++ वर्ग के निजी और संरक्षित डेटा को एक्सेस करना चाह सकता है।
C ++ 'मित्र' फ़ंक्शन या वर्ग नामक एक विशेष सुविधा के माध्यम से निजी और संरक्षित डेटा तक पहुंचने के लिए एक सुविधा प्रदान करता है जिसे हम यहां इस ट्यूटोरियल में चर्चा करेंगे।
आप क्या सीखेंगे:
- C ++ में फ्रेंड फंक्शन
- ए फ्रेंड फंक्शन का उदाहरण
- मित्र वर्ग
- फ्रेंड फंक्शन के फायदे / नुकसान
- निष्कर्ष
- अनुशंसित पाठ
C ++ में फ्रेंड फंक्शन
C ++ में एक मित्र फ़ंक्शन एक फ़ंक्शन है जो कीवर्ड 'मित्र' से पहले है। जब फ़ंक्शन को एक मित्र के रूप में घोषित किया जाता है, तो यह कक्षा के निजी और संरक्षित डेटा सदस्यों तक पहुंच सकता है।
कक्षा के अंदर एक फ्रेंड फंक्शन की घोषणा की जाती है, जिसमें नीचे दिखाए गए फ्रेंड कीवर्ड होते हैं।
class className{ …… friend returnType functionName(arg list); };
जैसा कि ऊपर दिखाया गया है, मित्र फ़ंक्शन को उस वर्ग के अंदर घोषित किया जाता है जिसके निजी और संरक्षित डेटा सदस्यों को एक्सेस किया जाना है। फ़ंक्शन को कोड फ़ाइल में कहीं भी परिभाषित किया जा सकता है और हमें कीवर्ड मित्र या गुंजाइश रिज़ॉल्यूशन, ऑपरेटर का उपयोग करने की आवश्यकता नहीं है।
हमारे कार्यक्रम में मित्र कार्यों को लागू करते समय याद रखने के लिए कुछ बिंदु हैं:
- कक्षा के निजी या सार्वजनिक खंड में एक मित्र समारोह घोषित किया जा सकता है।
- इसे ऑब्जेक्ट का उपयोग किए बिना एक सामान्य फ़ंक्शन की तरह कहा जा सकता है।
- एक फ्रेंड फंक्शन क्लास के दायरे में नहीं आता है, जिसमें से यह एक दोस्त है।
- एक मित्र फ़ंक्शन को क्लास ऑब्जेक्ट का उपयोग करके आमंत्रित नहीं किया जाता है क्योंकि यह क्लास के दायरे में नहीं है।
- एक मित्र फ़ंक्शन सीधे वर्ग के निजी और संरक्षित डेटा सदस्यों तक नहीं पहुंच सकता है। इसे एक क्लास ऑब्जेक्ट का उपयोग करने और फिर डॉट ऑपरेटर का उपयोग करके सदस्यों तक पहुंचने की आवश्यकता है।
- एक दोस्त समारोह एक वैश्विक समारोह या किसी अन्य वर्ग का सदस्य हो सकता है।
ए फ्रेंड फंक्शन का उदाहरण
आइए हम फ्रेंड फंक्शन के उपयोग को बेहतर ढंग से समझने के लिए एक प्रोग्रामिंग उदाहरण लागू करते हैं।
#include #include using namespace std; class sample{ int length, breadth; public: sample(int length, int breadth):length(length),breadth(breadth) {} friend void calcArea(sample s); //friend function declaration }; //friend function definition void calcArea(sample s){ cout<<'Area = '< आउटपुट:
क्षेत्र = 150
उपरोक्त कार्यक्रम में, हमारे पास निजी सदस्यों की लंबाई और चौड़ाई के साथ एक वर्ग नमूना है। हमारे पास एक सार्वजनिक निर्माणकर्ता है जो लंबाई और चौड़ाई के मूल्यों को शुरू करता है। अगला, हमारे पास एक दोस्त फ़ंक्शन 'कैल्क्रिया' है जो लंबाई और चौड़ाई को ध्यान में रखकर क्षेत्र की गणना करता है।
ध्यान दें कि कैल्केरिया एक फ्रेंड फंक्शन है और क्लास का हिस्सा नहीं है। मुख्य फ़ंक्शन में, क्लास के नमूने की एक वस्तु बनाने के बाद, हम इसे कैल्केरिया फ़ंक्शन में पास करते हैं जो क्षेत्र की गणना करता है और मूल्य प्रदर्शित करता है।
मित्र वर्ग
मित्र कार्यों की तरह, हमारे पास एक मित्र वर्ग भी हो सकता है। मित्र वर्ग उस कक्षा के निजी और संरक्षित सदस्यों तक पहुँच सकता है, जो उसका मित्र है।
class A{ …… friend class B; }; class B{ …….. };
जैसा कि ऊपर दिखाया गया है, वर्ग B वर्ग A का मित्र है। इसलिए वर्ग B वर्ग A के निजी और संरक्षित सदस्यों तक पहुँच सकता है।
लेकिन इसका मतलब यह नहीं है कि क्लास ए, बी के निजी और संरक्षित सदस्यों तक पहुंच सकता है। ध्यान दें कि जब तक हम ऐसा नहीं करते हैं तब तक दोस्ती पारस्परिक नहीं है।
इसी तरह, वर्ग की मित्रता विरासत में नहीं मिली है। इसका अर्थ यह है कि जैसे क्लास B कक्षा A का मित्र है, वह वर्ग A के उपवर्गों का मित्र नहीं होगा।
आइए हम मित्र वर्ग को प्रदर्शित करने के लिए एक प्रोग्रामिंग उदाहरण लेते हैं।
#include #include using namespace std; class Area{ int length,breadth,area; public: Area(int length,int breadth):length(length),breadth(breadth) {} void calcArea(){ area = length * breadth; } friend class printClass; }; class printClass{ public: void printArea(Area a){ cout<<'Area = '< आउटपुट:
क्षेत्र = 150
सेलेनियम वेबड्राइवर के लिए जार फाइलें आवश्यक हैं
इस कार्यक्रम में, हमारे पास दो कक्षाएं हैं। वर्ग 'क्षेत्र' जो लंबाई और चौड़ाई मापदंडों का उपयोग करके क्षेत्र की गणना करता है। ध्यान दें कि क्षेत्र, क्षेत्र, लंबाई और चौड़ाई सभी वर्ग क्षेत्र के निजी सदस्य हैं।
उपयोग की जाने वाली अगली कक्षा 'प्रिंटक्लास' है जो एरिया क्लास में एक फ़ंक्शन कैल्क्रिया द्वारा गणना किए गए क्षेत्र को प्रिंट करता है। जैसा कि सदस्य निजी हैं, हमें प्रिंटक्लास को एरिया क्लास का मित्र बनाने की आवश्यकता है।
एक बार जब यह हो जाता है, तो मुख्य कार्य में हम एरिया क्लास का एक ऑब्जेक्ट बनाते हैं, एरिया की गणना करते हैं और उस एरिया को प्रिंट करने के लिए प्रिंटक्लास क्लास के फंक्शन को प्रिंट करते हैं।
फ्रेंड फंक्शन के फायदे / नुकसान
फ्रेंड फंक्शन या क्लास का एक फायदा यह है कि हम क्लास के निजी और संरक्षित डेटा को एक्सेस कर सकते हैं। उदाहरण के लिए, यदि हम एक लिंक की गई सूची को लागू कर रहे हैं, तो हम लिंक किए गए सूची वर्ग को नोड वर्ग के मित्र के रूप में बना सकते हैं और इसके डेटा तक पहुंच सकते हैं क्योंकि लिंक की गई सूची में नोड्स होते हैं।
इस प्रकार एक निश्चित स्थिति में फ्रेंड फंक्शन या क्लास का उपयोग करना फायदेमंद साबित हो सकता है। हालाँकि, इसके कुछ नुकसान भी हैं।
C ++ की विशिष्ट विशेषताओं में से एक है एनकैप्सुलेशन यानी डेटा और फ़ंक्शंस को उस डेटा पर एक साथ संचालित करना ताकि कोई भी बाहरी फ़ंक्शन या वर्ग डेटा तक नहीं पहुंच सके। लेकिन मित्र कार्यों या वर्ग को किसी अन्य वर्ग के निजी सदस्यों तक पहुंचने की अनुमति देकर, हम वास्तव में इनकैप्सुलेशन सुविधा से समझौता करते हैं।
इसे रोकने के लिए, हमें मित्र कार्यों या कक्षा का उपयोग करने में सावधानी बरतनी चाहिए। हमें यह सुनिश्चित करना चाहिए कि हमें अपने कार्यक्रम में बहुत सारे मित्र कार्यों और कक्षाओं का उपयोग नहीं करना चाहिए जो इनकैप्सुलेशन पर पूरी तरह से समझौता करेंगे।
निष्कर्ष
यह C ++ में मित्र फ़ंक्शन और कक्षाओं पर हमारे ट्यूटोरियल का निष्कर्ष निकालता है।
मित्र वर्गों और कार्यों का उपयोग करते समय पाठकों को बहुत सतर्क रहना चाहिए, हालांकि यह प्रोग्रामर के लिए एक वरदान के रूप में कार्य कर सकता है, इसे सावधानीपूर्वक उपयोग करने की भी आवश्यकता है क्योंकि दोस्त कार्यों और कक्षाओं के उपयोग से अधिक हमारे कार्यक्रम में इनकैप्सुलेशन की ओओपी सुविधा से समझौता कर सकते हैं।
हमारे आगामी ट्यूटोरियल में, हम C ++ में स्टेटिक फंक्शन्स के बारे में विस्तार से जानेंगे।
=> स्क्रैच से C ++ जानने के लिए यहाँ जाएँ।
अनुशंसित पाठ