c++ - Overload an operator twice -
इस सवाल का पहले से ही एक उत्तर है: < / P>
- 8 जवाब
यह वही अधिभार संभव है ऑपरेटर को सी ++ पर दो बार?
जब मैं एक प्रकार के रूप में वापसी प्रकार का उपयोग करके ऑपरेटर को ओवरलोड करने का प्रयास करता हूं, तो कंपाइलर मुझे एक त्रुटि दिखाता है।
bigint.h: 41 : 9: त्रुटि: एक स्टड :: स्ट्रिंग बिगइंट :: ऑपरेटर + (बिगइंंट) एक ???? अतिभारित नहीं हो सकता bigint.h: 40: 9: त्रुटि: बिगइंट बिगइंट :: ऑपरेटर + (बिगइंंट) के साथ :?
यह मेरा कोड है:
.h:
बिगइंत ऑपरेटर + (बिगइंंट); स्ट्रिंग ऑपरेटर + (बिगइंंट);
.cc:
बिगइंत बिगइंट :: ऑपरेटर + (बिगइंट एम) {if (this-> ;.s.size ()! = M. नंबर.size ()) तयलेैम्बन (यह- & gt; संख्या, एम.एनम्बर); // कॉल योग; यह- & gt; संख्या = योग (यह- & gt; संख्या, एम। संख्या); वापसी (* यह); } स्ट्रिंग बिगइंट :: ऑपरेटर + (बिगइंट एम) {// कॉल बिगइंट अधिभार +; }
संपादित करें: जाहिरा तौर पर मैं एक ही ऑपरेटर को एक आधार के रूप में दो प्रकार की वापसी प्रकार का उपयोग नहीं कर सकता। सुझाव:
जैसा कि बताया गया है, आप अकेले वापसी प्रकार पर अधिभार नहीं बढ़ा सकते हैं। तो यह ठीक है:
फ़ू ऑपरेटर + (कॉन्स्ट फू एंड कंस्ट्र फू एंड amp); फू ऑपरेटर + (कॉन्स्ट चार *, डबल);
लेकिन यह नहीं है:
फ़ू ऑपरेटर + (कॉन्स्ट फू एंड कंस्ट्र फू एंड amp); बार ऑपरेटर + (कॉन्स्ट फू एंड कंस्ट्र फू एंड amp);
लेकिन अधिकांश समय किसी समस्या के लिए वैध और सरल समाधान हैं। उदाहरण के लिए, आपके जैसी स्थिति में, जहां आप निम्न कार्य करना चाहते हैं:
फू ए, बी; फू सी = ए + बी; बार बार = ए + बी;
फिर एक आम रणनीति
बार एक अंतर्निहित कनवर्टर कन्स्ट्रक्टर देना है:
struct बार {बार (कॉन्स्ट फू & amp; Foo) {....}};
या
फ़ू एक रूपांतरण ऑपरेटर दें:
struct Foo {स्पष्ट ऑपरेटर बार () {....}। ...};
ध्यान दें कि आप ऑपरेटर
स्पष्ट को चिह्नित नहीं कर सकते हैं यदि आपके पास कोई C ++ 11 कंपाइलर नहीं है।
Comments
Post a Comment