operator overloading - c++ overloaded method in derived class -


मेरे पास निम्न प्रश्न है:

विधि के साथ आधार वर्ग ए मान:

 <कोड> & amp; ऑपरेटर + (ए और ए) {...}  

मेरे पास एक व्युत्पन्न वर्ग बी भी है जो अधिभार (या कम से कम ऐसा करना चाहिए) इस विधि:

 < कोड> & amp; ऑपरेटर + (बी एंड बी) {...}  

समस्या यह है कि अगर मैं ऐसा कुछ करना चाहता हूं: b + a (जहां बी टाइप बी और प्रकार A का है) मुझे एक संकलन त्रुटि मिलती है (त्रुटि C2679: बाइनरी '+': कोई ऑपरेटर नहीं मिला जो कि 'ए' (या कोई स्वीकार्य रूपांतरण नहीं है) का दायां हाथ प्रचालन करता है)।

उस आधार क्लास पद्धति को कॉल नहीं करना चाहिए? (ऐसा लगता है कि यह विधि को ओवरराइड करता है ..) यदि नहीं, तो क्यों? यह ठीक करने का एक तरीका है (मुझे ए के साथ बी में विधि अधिभारित करने के लिए मत कहो);

क्षमा करें मैं प्रारूपित पाठ में उदाहरण नहीं देता, लेकिन मैं इसे प्रारूपित करने के बारे में नहीं जानता।

अग्रिम धन्यवाद!

PS I का उपयोग Visual Studio 2010 बीटा।

नहीं, यह नहीं होगा बेस क्लास फ़ंक्शन को कॉल करें। कक्षा बी में एक ऑपरेटर + है, यह सही पैरामीटर, कहानी का अंत नहीं लेता है।

आप एक नि: शुल्क कार्य के रूप में ऑपरेटर परिभाषित कर सकते हैं, नहीं किसी भी कक्षा में शायद एक मित्र, अगर निजी डेटा तक पहुंचने की आवश्यकता है:

  एक ऑपरेटर + (कॉन्स्ट ए एंड एलएचएस, कॉन्स्ट ए और आरए) {...} बी ऑपरेटर + (कॉन्स्ट बी एंड एलएचएस , Const B & amp; rhs) {...}  

फिर बी + एक पहले ऑपरेटर को कॉल करेगा, जैसा कि a + b होगा। बी + बी दूसरे को कॉल करेगा।

वैकल्पिक रूप से, आप कक्षा बी में इसे डालकर बेस क्लास कार्यान्वयन "अन-छुपाएं" कर सकते हैं:

  ए का उपयोग कर: ऑपरेटर +;  

यह शायद सबसे अच्छा नहीं है, यद्यपि। अधिकांश ऑपरेटरों को मुफ्त कार्यों के मुकाबले बेहतर कार्य मिलता है, क्योंकि तब आप दोनों ऑपरेंडों पर स्वचालित रूपांतरण प्राप्त करते हैं। सी ++ एक सदस्य फ़ंक्शन कॉल के एलएचएस पर रूपांतरण नहीं करता है।

बीटीडब्ल्यू, ऑपरेटर + निश्चित रूप से मूल्य से लौटा देना चाहिए, संदर्भ के अनुसार नहीं, क्योंकि फ़ंक्शन रिटर्न के बाद एक स्वचालित (स्टैक) चर अब मौजूद नहीं है। तो फोन करने वाले को नतीजे की एक प्रति की आवश्यकता है, इसके संदर्भ में नहीं। इस कारण ऑपरेटर + और उत्तराधिकार एक महान मिश्रण नहीं हैं, हालांकि यह संभवतः तब तक काम कर सकता है जितना कॉलर जानता है कि वे क्या कर रहे हैं।


Comments

Popular posts from this blog

oracle - The fastest way to check if some records in a database table? -

php - multilevel menu with multilevel array -

jQuery UI: Datepicker month format -