c++ - What happens if there's an 'overloading clash' regarding streams? -
मान लीजिए कि हमारे पास isstream निम्न विधि के साथ उपवर्ग है:
< कोड> SomeStream & amp; ऑपरेटर & gt; & gt; (कुछ और amp; कुछ) {// .. कुछ में डेटा लिखें} और हमारे पास निम्न वैश्विक विधि भी थी:
कुछ और ; ऑपरेटर & gt; & gt; (istream & amp; स्ट्रीम, कुछ और amp; कुछ) {//। स्ट्रीम से डेटा में कुछ लिखिए} C ++ कैसे पता चलता है कि कौन सी विधि निम्नलिखित कोड के लिए कॉल करती है: < / P>
उदाहरणऑफ़सामस्ट्रीम & gt; & gt; instanceOfSomething;
प्रश्न का पालन करें: SomeStream को something में लिखने के लिए बेहतर या अधिक सामान्य तरीका क्या है - मुझे ऑपरेटर & gt; & gt; में SomeStream के लिए एक और अधिभार जोड़ना चाहिए, जिसमें कोई कुछ और तर्क लेता है? या मुझे विपरीत दिशा में जाना चाहिए, और कुछ में एक अधिभार बनाना चाहिए जो कि somestream लेता है? (वास्तव में कुछ में नहीं, लेकिन स्पष्ट कारणों के कारण वैश्विक कार्य के रूप में)।
सी ++ में सामान्य रूप से ओवरलोड रिज़ॉल्यूशन नियम जटिल हैं। इस मामले में यह जानना उपयोगी है कि ओवरलोड रिज़ॉल्यूशन के प्रयोजनों के लिए एक सदस्य फ़ंक्शन, गैर-सदस्यीय फ़ंक्शन की तरह बर्ताव करता है जो क्लास के संदर्भ में एक प्रथम तर्क के रूप में संदर्भ लेता है, यानी , विकल्प कुछ जैसी है [1]
कुछ स्ट्रीम & amp; ऑपरेटर & gt; & gt; (कुछ स्ट्रीम और amp; somestream, कुछ और amp; कुछ) और
कुछ और amp; ऑपरेटर & gt; & gt; (istream & amp; स्ट्रीम, कुछ और amp; कुछ) बेशक वापसी प्रकार कोई फर्क नहीं पड़ता, और
instanceOfSomeStream & gt; & gt; ; उदाहरण के लिए पहले अधिभार चुना जाएगा क्योंकि SomeStream अधिक isstream से व्युत्पन्न है।
आपका अनुवर्ती- अप सवाल एक अलग सवाल होना चाहिए। यहां कुछ चर्चा है जो संबंधित हो सकती है:
[1] नोट: मैं "कुछ ऐसा" कहता हूं क्योंकि यह बिल्कुल सही नहीं है उदाहरण के लिए, ऐसे सदस्य फ़ंक्शन को एक रैवल्यू ऑब्जेक्ट एक्सप्रेशन पर बुलाया जा सकता है, हालांकि एक लावल्यू संदर्भ ऊपर दिखाया गया है।
Comments
Post a Comment