जब C++ में ऑपरेटर ओवरलोडिंग की बात आती है, तो 3 बुनियादी नियम हैं जिनका आपको पालन करना चाहिए। सभी ऐसे नियमों की तरह, अपवाद भी हैं। ये 3 नियम हैं:
- 1. जब भी किसी ऑपरेटर का अर्थ स्पष्ट रूप से स्पष्ट और निर्विवाद नहीं होता, तो इसे ओवरलोड नहीं किया जाना चाहिए। इसके बजाय, एक अच्छे चुने हुए नाम के साथ एक फ़ंक्शन प्रदान करें। मूल रूप से, ऑपरेटर ओवरलोडिंग के लिए पहला और सबसे महत्वपूर्ण नियम, इसके दिल में, कहता है: इसे न करें। यह अजीब लग सकता है, लेकिन केवल कुछ ही मामले हैं जहां ऑपरेटर ओवरलोडिंग उपयुक्त है। कारण यह है कि एक ऑपरेटर के अनुप्रयोग के पीछे की सिमेंटिक्स को समझना मुश्किल है जब तक कि एप्लिकेशन डोमेन में ऑपरेटर का उपयोग अच्छी तरह से ज्ञात और निर्विवाद न हो।
- 2. हमेशा ऑपरेटर की प्रसिद्ध सिमेंटिक्स के साथ रहें। C++ ओवरलोडेड ऑपरेटर्स की सिमेंटिक्स पर कोई सीमा नहीं लगाता। आपका कंपाइलर खुशी से उस कोड को स्वीकार करेगा जो बाइनरी + ऑपरेटर को अपने दाएं ऑपरेंड से घटाने के लिए कार्यान्वित करता है। हालांकि, ऐसे ऑपरेटर के उपयोगकर्ता कभी भी a + b एक्सप्रेशन के a से b घटाने पर संदेह नहीं करेंगे।
- 3. संबंधित ऑपरेशन्स के सेट में से हमेशा सभी प्रदान करें। ऑपरेटर्स एक-दूसरे से और अन्य ऑपरेशन्स से संबंधित हैं। यदि आपका प्रकार a + b का समर्थन करता है, तो उपयोगकर्ता a += b को कॉल करने की भी उम्मीद करेंगे। यदि यह प्रीफिक्स इन्क्रीमेंट ++a का समर्थन करता है, तो वे a++ के भी काम करने की उम्मीद करेंगे। यदि वे जांच सकते हैं कि a < b, तो वे निश्चित रूप से यह भी जांचने की उम्मीद करेंगे कि a > b। यदि वे आपके प्रकार को कॉपी-कंस्ट्रक्ट कर सकते हैं, तो वे असाइनमेंट के भी काम करने की उम्मीद करेंगे।
- अधिकांश मामलों में आपको ऑपरेटर ओवरलोडिंग की आवश्यकता नहीं होती और केवल तभी ऑपरेटर्स को ओवरलोड करना चाहिए जब वे अच्छी तरह से परिभाषित हों और स्थिति के लिए उपयुक्त हों। यह पोस्ट https://stackoverflow.com/a/4421708/3719089 से प्रेरित है।