2010-12-03 36 views
5

इस तरह के cout का उपयोग करने के लिए: std :: cout < < myObject, मुझे ओस्ट्रीम ऑब्जेक्ट क्यों पास करना है? मैंने सोचा कि यह एक अंतर्निहित पैरामीटर था।ऑपरेटर << ओवरलोडिंग ओस्ट्रीम

ostream &operator<<(ostream &out, const myClass &o) { 

    out << o.fname << " " << o.lname; 
    return out; 
} 

धन्यवाद

उत्तर

5

आप ostream के लिए एक और सदस्य समारोह जोड़ने नहीं कर रहे हैं, कि जब वर्ग को पुनर्परिभाषित करने की आवश्यकता होगी। आप पर इसे जोड़ नहीं सकते हैं, क्योंकि ostream पहले चला जाता है। एकमात्र चीज जो आप कर सकते हैं वह एक स्वतंत्र कार्य में एक अधिभार जोड़ना है, जो आप उदाहरण में कर रहे हैं।

+0

+1 उस पर कटौती के लिए जो उसने अनिश्चित था –

-1

क्योंकि आप एक नि: शुल्क फ़ंक्शन ओवरलोड कर रहे हैं, सदस्य कार्य नहीं।

2

केवल तभी यदि यह कक्षा का सदस्य कार्य है जो अन्यथा पहला तर्क होगा। इस प्रकार, यह होगा:

class ostream { 
    ... 
    ostream &operator << (const myClass &o); 
    ... 
}; 

ostream के बाद से लंबे समय से लिखा गया था अपनी कक्षा से पहले, तुम वहाँ में अपने वर्ग के लिए हो रही की समस्या को देखते हैं। इस प्रकार, हम एक फ्रीस्टैंडिंग समारोह के रूप में ऑपरेटर को लागू करना चाहिए:

(return type) operator << ((left hand side), (right hand side)); 

ऑपरेटर के रूप में वर्गों के सदस्य काम करता है, बाएं हाथ की ओर this है, और तर्क दाहिने हाथ की ओर हो जाता है लागू किया जाता है जब। (द्विआधारी ऑपरेटरों के लिए - यूनरी ऑपरेटर समान रूप से काम करते हैं।)

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