2010-07-23 19 views
6

स्ट्रीम ऑपरेटरों का ओवरलोडिंग क्यों होना चाहिए (< <, >>) उन्हें कक्षा के सदस्य बनाने के बजाए दोस्तों के रूप में रखा जाना चाहिए?स्ट्रीम ऑपरेटर ओवरलोडिंग

+3

यह आपके कक्षाओं के निजी सदस्यों के साथ संबंध होने पर प्रोग्रामिंग को और अधिक रोमांचक बनाता है। – zneak

उत्तर

9

जब आप कक्षा के सदस्य फ़ंक्शन के रूप में एक बाइनरी ऑपरेटर को अधिभारित करते हैं तो ओवरलोड का उपयोग तब किया जाता है जब पहले ऑपरेंड क्लास प्रकार का होता है।

स्ट्रीम ऑपरेटरों के लिए, पहला ऑपरेंड स्ट्रीम है और आमतौर पर कस्टम क्लास नहीं है।

इस कारण से पारंपरिक कक्षाओं में उपयोग किए जाने वाले कस्टम वर्गों के लिए अधिभारित स्ट्रीम ऑपरेटर कस्टम क्लास के सदस्य कार्य नहीं हो सकते हैं, वे नि: शुल्क कार्य होना चाहिए।

(मुझे लगता है कि स्ट्रीम कक्षाएं बदलने के लिए खुली नहीं हैं; अगर वे अतिरिक्त कस्टम प्रकारों का सामना करने के लिए कक्षाओं को स्ट्रीम करने के लिए सदस्य कार्य जोड़ सकते हैं लेकिन यह आमतौर पर एक निर्भरता बिंदु से अवांछनीय होगा।)

चाहे वे दोस्त हैं या नहीं, इस पर निर्भर होना चाहिए कि उन्हें कक्षा के गैर-सार्वजनिक सदस्यों तक पहुंच की आवश्यकता है या नहीं।

+0

मुझे लगता है कि यह थोड़ा भ्रामक है। वे * सदस्य कार्य हो सकते हैं, लेकिन उन्हें सामान्य तरीके (धाराओं को लिखने) का उपयोग करने के लिए, उन्हें सदस्य कार्य करने की आवश्यकता है। –

+0

@sztomi: मुझे आपकी टिप्पणी समझ में नहीं आ रही है। नहीं, वे सदस्य कार्यों के लिए _need_ नहीं हैं; वे सदस्य कार्य नहीं कर सकते हैं (जब तक कि आप स्ट्रीम स्ट्रीम लिख रहे हों या अपने स्ट्रीमिंग ऑपरेटरों को दुनिया के बाकी हिस्सों से पीछे न भेजें)। –

+0

तो हाँ, वे सदस्य कार्य हो सकते हैं। यदि आप उन्हें सामान्य रूप से काम करना चाहते हैं (जैसे बाकी शब्द इसका उपयोग करता है), तो आपको उन्हें मित्रों के रूप में परिभाषित करना होगा। मेरा मतलब यही था। –

0

किस वर्ग के सदस्य? बाएं हाथ के ऑपरेंड का प्रकार क्या है?

वे की जरूरत नहीं है, friend होने के लिए हालांकि, जब तक अन्यथा unaccessible गोपनीय डेटा तक पहुंचने की जरूरत है।

2

तो आप कह सकते हैं:

some_stream << my_class; 

ध्यान दें कि सदस्य ऑपरेटरों की परिभाषा बाएं हाथ की ओर वर्ग यह स्वयं बनाता है। उदाहरण:

my_class << some_stream; 

मानक धाराओं को कैसे काम करना है, यह नहीं है।

संबंधित मुद्दे