स्ट्रीम ऑपरेटरों का ओवरलोडिंग क्यों होना चाहिए (< <, >>) उन्हें कक्षा के सदस्य बनाने के बजाए दोस्तों के रूप में रखा जाना चाहिए?स्ट्रीम ऑपरेटर ओवरलोडिंग
उत्तर
जब आप कक्षा के सदस्य फ़ंक्शन के रूप में एक बाइनरी ऑपरेटर को अधिभारित करते हैं तो ओवरलोड का उपयोग तब किया जाता है जब पहले ऑपरेंड क्लास प्रकार का होता है।
स्ट्रीम ऑपरेटरों के लिए, पहला ऑपरेंड स्ट्रीम है और आमतौर पर कस्टम क्लास नहीं है।
इस कारण से पारंपरिक कक्षाओं में उपयोग किए जाने वाले कस्टम वर्गों के लिए अधिभारित स्ट्रीम ऑपरेटर कस्टम क्लास के सदस्य कार्य नहीं हो सकते हैं, वे नि: शुल्क कार्य होना चाहिए।
(मुझे लगता है कि स्ट्रीम कक्षाएं बदलने के लिए खुली नहीं हैं; अगर वे अतिरिक्त कस्टम प्रकारों का सामना करने के लिए कक्षाओं को स्ट्रीम करने के लिए सदस्य कार्य जोड़ सकते हैं लेकिन यह आमतौर पर एक निर्भरता बिंदु से अवांछनीय होगा।)
चाहे वे दोस्त हैं या नहीं, इस पर निर्भर होना चाहिए कि उन्हें कक्षा के गैर-सार्वजनिक सदस्यों तक पहुंच की आवश्यकता है या नहीं।
मुझे लगता है कि यह थोड़ा भ्रामक है। वे * सदस्य कार्य हो सकते हैं, लेकिन उन्हें सामान्य तरीके (धाराओं को लिखने) का उपयोग करने के लिए, उन्हें सदस्य कार्य करने की आवश्यकता है। –
@sztomi: मुझे आपकी टिप्पणी समझ में नहीं आ रही है। नहीं, वे सदस्य कार्यों के लिए _need_ नहीं हैं; वे सदस्य कार्य नहीं कर सकते हैं (जब तक कि आप स्ट्रीम स्ट्रीम लिख रहे हों या अपने स्ट्रीमिंग ऑपरेटरों को दुनिया के बाकी हिस्सों से पीछे न भेजें)। –
तो हाँ, वे सदस्य कार्य हो सकते हैं। यदि आप उन्हें सामान्य रूप से काम करना चाहते हैं (जैसे बाकी शब्द इसका उपयोग करता है), तो आपको उन्हें मित्रों के रूप में परिभाषित करना होगा। मेरा मतलब यही था। –
किस वर्ग के सदस्य? बाएं हाथ के ऑपरेंड का प्रकार क्या है?
वे की जरूरत नहीं है, friend
होने के लिए हालांकि, जब तक अन्यथा unaccessible गोपनीय डेटा तक पहुंचने की जरूरत है।
तो आप कह सकते हैं:
some_stream << my_class;
ध्यान दें कि सदस्य ऑपरेटरों की परिभाषा बाएं हाथ की ओर वर्ग यह स्वयं बनाता है। उदाहरण:
my_class << some_stream;
मानक धाराओं को कैसे काम करना है, यह नहीं है।
- 1. सुरक्षित रूप से स्ट्रीम ऑपरेटर ओवरलोडिंग >>
- 2. स्कैला: विधि \ ऑपरेटर ओवरलोडिंग
- 3. ऑपरेटर ओवरलोडिंग और प्राथमिकता
- 4. अजगर सी ++ ऑपरेटर ओवरलोडिंग
- 5. ऑपरेटर ओवरलोडिंग प्लगइन जावा
- 6. ऑपरेटर ओवरलोडिंग सी ++
- 7. ऑपरेटर ओवरलोडिंग और नामस्थान
- 8. सी ++ ओवरलोडिंग असाइनमेंट ऑपरेटर
- 9. ओवरलोडिंग ऑपरेटर == की शिकायत
- 10. सी ++ स्थिर ऑपरेटर ओवरलोडिंग
- 11. ओवरलोडिंग ऑपरेटर = गैर-सदस्य
- 12. सी # ऑपरेटर-ओवरलोडिंग
- 13. वर्चुअल ऑपरेटर ओवरलोडिंग ->()
- 14. ओवरलोडिंग ऑपरेटर>
- 15. सी ++ ऑपरेटर ओवरलोडिंग चीटशीट
- 16. रूबी ऑपरेटर ओवरलोडिंग प्रश्न
- 17. ओवरलोडिंग ऑपरेटर [] एक विरल वेक्टर
- 18. ऑपरेटर नया ओवरलोडिंग और संरेखण
- 19. खाका असाइनमेंट ऑपरेटर ओवरलोडिंग रहस्य
- 20. मैनिपुलेटर्स के लिए ऑपरेटर ओवरलोडिंग
- 21. सी # में ओवरलोडिंग असाइनमेंट ऑपरेटर
- 22. ओवरलोडिंग ऑपरेटर << - सी ++
- 23. सी ++ ओवरलोडिंग एक्सट्रैक्शन ऑपरेटर - त्रुटि
- 24. सी ++: विरासत और ऑपरेटर ओवरलोडिंग
- 25. क्या डार्ट समर्थन ऑपरेटर ओवरलोडिंग
- 26. ऑपरेटर << ओवरलोडिंग ओस्ट्रीम
- 27. ओवरलोडिंग ऑपरेटर एक आधार वर्ग
- 28. सी ++ टेम्पलेट मित्र ऑपरेटर ओवरलोडिंग
- 29. सी ++ typedefs और ऑपरेटर ओवरलोडिंग
- 30. कक्षा टेम्पलेट्स पर ऑपरेटर ओवरलोडिंग
यह आपके कक्षाओं के निजी सदस्यों के साथ संबंध होने पर प्रोग्रामिंग को और अधिक रोमांचक बनाता है। – zneak