this धागे के उत्तरों के अनुसार, operator=
गैर-सदस्य फ़ंक्शन के रूप में अधिभारित नहीं किया जा सकता है।ओवरलोडिंग ऑपरेटर = गैर-सदस्य
class MyClass
{
// ...
};
MyClass& operator=(MyClass& Left, MyClass& Right)
{
// ...
}
ऐसा क्यों है: तो, उदाहरण के लिए, निम्नलिखित संकलक बहुत गुस्से में है? मेरे पास गेटर्स और सेटर्स के साथ एक कंटेनर क्लास है, इसलिए एक सदस्य फ़ंक्शन अनावश्यक है और यह encapsulation तोड़ देगा। उपर्युक्त धागे के उत्तरों में से एक ने कहा कि यह सुनिश्चित करना है कि "एल-वैल्यू अपने पहले ऑपरेंड के रूप में प्राप्त हुआ है," लेकिन मैं इसका अर्थ समझ नहीं पा रहा हूं। क्या कोई स्पष्टीकरण दे सकता है?
इसके अतिरिक्त, operator=
, operator()
, operator[]
और operator->
"oddball" के मामले हैं ...? या मुझे सदस्य कार्यों के रूप में सभी अधिभारित ऑपरेटरों को लागू करना चाहिए ...? (मुझे पता है कि यह अन्यथा करने के लिए पूरी तरह से कानूनी है, लेकिन मैं बेहतर अभ्यास की तलाश में हूं।)
यह थ्रेड भी देखें http://stackoverflow.com/questions/3938036/rationale-of-enforcing-some-operators-to-be-members – UmmaGumma
मुझे लगता है कि गेटर्स/सेटर्स एक असाइनमेंट ऑपरेटर से अधिक encapsulation तोड़ते हैं। नोट: यदि आप एक परिभाषित नहीं करते हैं तो आपकी कक्षा में पहले से ही एक असाइनमेंट ऑपरेटर है। कोशिश करो। –
सदस्य कार्य encapsulation तोड़ नहीं है; वे इसका एक हिस्सा हैं। "गैर-सदस्य, गैर-मित्र कार्य" बनाने की वरीयता के परिणामस्वरूप सरल वर्ग हो सकते हैं, लेकिन सामान्य स्थिति में, ऑपरेटर =() को लागू करने के लिए आवश्यक सभी चीज़ों को उजागर करने से ऑपरेटर =() को सदस्य बनाने की तुलना में encapsulation कमजोर होने की संभावना अधिक होती है। –