यहाँ मेरी कोड उदाहरण है:ओवरलोडिंग ऑपरेटर>
class X
{
public:
void f() {}
};
class Y : public X
{
public:
X& operator->() { return *this; }
void f() {}
};
int main()
{
Y t;
t.operator->().f(); // OK
t->f(); // error C2819: type 'X' does not have an overloaded member 'operator ->'
// error C2232: '->Y::f' : left operand has 'class' type, use '.'
}
क्यों संकलक एक्स वाई से ऑपरेटर> के लिए "जिम्मेदारी ले जाएँ" करने की कोशिश कर रहा है? जब मैं एक्स :: ओप-> को कार्यान्वित करता हूं तो मैं एक्स को वापस नहीं कर सकता - संकलन त्रुटि कहता है कि "अनंत रिकर्सन" कहता है कि एक्स :: ओप-> से कुछ ज़ेड लौटने पर फिर से कहते हैं कि ज़ेड में ऑपरेटर नहीं है->, इस प्रकार उच्च हो रहा है और पदानुक्रम में उच्च।
क्या कोई इस दिलचस्प व्यवहार को समझा सकता है? :)
मैं सिर्फ इतना है कि जो कुछ भी यह की जरूरत है देता है समर्थन करने के लिए यह नहीं कहूंगा कि यह एक सूचक वापस जाने के लिए लगता है है, 'ऑपरेटर>'। – GManNickG
@ जीएमएन- अच्छा बिंदु। मैं यहां सादगी के लिए जा रहा था, लेकिन आप सही हैं। कुछ वाकई मजेदार चाल हैं जो आप स्मार्ट पॉइंटर्स के साथ खींच सकते हैं जो इस तकनीक पर भरोसा करते हैं। – templatetypedef
@GMan: चूंकि इस तरह के प्रकार सामूहिक रूप से * स्मार्ट पॉइंटर्स * कहा जाता है, मुझे नहीं लगता कि templatetypedef शब्द * सूचक * शब्द का उपयोग करने में गलत है, वह बस इसे सामान्य अर्थ में उपयोग कर रहा है। –