myclass
एक सी ++ वर्ग मेरे द्वारा लिखा है कैसे उपयोग कर सकते हैं और जब मैं लिखना:मैं अदालत << MyClass
myclass x;
cout << x;
कैसे उत्पादन 10
या 20.2
, एक integer
या एक float
मूल्य की तरह करने के लिए?
myclass
एक सी ++ वर्ग मेरे द्वारा लिखा है कैसे उपयोग कर सकते हैं और जब मैं लिखना:मैं अदालत << MyClass
myclass x;
cout << x;
कैसे उत्पादन 10
या 20.2
, एक integer
या एक float
मूल्य की तरह करने के लिए?
यह बहुत आसान है, बस को लागू है:
std::ostream & operator<<(std::ostream & os, const myclass & foo)
{
os << foo.var;
return os;
}
आप ओएस के लिए एक संदर्भ के क्रम में श्रृंखला के लिए outpout वापस जाने के लिए की जरूरत है (अदालत < < foo < < endl)
द्वारा operator<<
आपकी कक्षा के लिए ओवरलोडिंग:
struct myclass {
int i;
};
std::ostream &operator<<(std::ostream &os, myclass const &m) {
return os << m.i;
}
int main() {
myclass x(10);
std::cout << x;
return 0;
}
यह कन्स्ट्रक्टर मान '10' आउटपुट करेगा? –
ध्यान दें कि यदि 'myclass' में कोई' निजी 'फ़ील्ड है, और आप उन्हें आउटपुट करने के लिए' ऑपरेटर <<() 'चाहते हैं, तो 'myclass' को' std :: ostream और ऑपरेटर << (std :: ostream &, myclass const &) घोषित करना चाहिए एक दोस्त के रूप में –
क्या यह 'माइक्लास कॉन्स एंड एम' के बजाय' मेरा माइक्लास और एम 'नहीं होना चाहिए? – Nubcake
आप <<
ऑपरेटर को ओवरलोड की जरूरत है,
std::ostream& operator<<(std::ostream& os, const myclass& obj)
{
os << obj.somevalue;
return os;
}
फिर जब आप कर cout << x
(जहां x
अपने मामले में प्रकार myclass
की है), यह उत्पादन जो कुछ भी आप इसे करने के लिए विधि में बता दिया है होगा। ऊपर दिए गए उदाहरण के मामले में यह x.somevalue
सदस्य होगा।
यदि सदस्य का प्रकार सीधे ostream
पर जोड़ा नहीं जा सकता है, तो आपको उपर्युक्त विधि का उपयोग करके <<
ऑपरेटर को उस प्रकार के लिए ओवरलोड करना होगा।
यह बाएं शिफ्ट ऑपरेटर है, न कि "स्ट्रीम ऑपरेटर"। Iostreams के संदर्भ में, यह या तो सम्मिलन या निष्कर्षण ऑपरेटर है, लेकिन यह स्ट्रीम ऑपरेटर कभी नहीं है। –
क्षमा करें, हाँ आप सही हैं। यही वह है जो मैंने इसे अपने सिर में बुलाया है क्योंकि मैं केवल धाराओं से निपटने के दौरान इसका उपयोग करता हूं। इस मामले में यह केवल ऑपरेटर स्ट्रीम करने के बजाय, जैसा कि आप कहते हैं, सम्मिलन ऑपरेटर होगा। मैंने उस बिट को हटाने के लिए अपना जवाब अपडेट कर लिया है। –
यह एक असीम पुनरावर्ती कार्य है। और यह एक उथल-पुथल हो गया! आपको सप्ताहांत को एसओ पर प्यार करना होगा! –