2010-09-18 15 views
5

मैं हमेशा सोचा था कि "ओवरराइड" को नष्ट ...नए/बनाम "अधिभार"

  • साधन जबकि
  • अधिक भार का मतलब है को लागू करने के लिए एक आधार वर्ग में एक समारोह (समान हस्ताक्षर) reimplementing अधिभावी एक ही नाम वाला एक फ़ंक्शन लेकिन अलग हस्ताक्षर

... और भ्रमित हो गया क्योंकि कभी-कभी लोग केवल अंतर की परवाह नहीं करते हैं।

नए/हटाए जाने के बारे में: क्या वे अधिभारित या ओवरराइड हैं?

एक विचार:

  • नया लागू करने/एक कक्षा = अधिभार
  • वैश्विक नई/हटाने = ओवरराइड

किसी भी सुधार/सुझाव/आपत्तियों reimplementing में ऑपरेटर हटाना चाहते हैं? और सवाल "हेच" को टैग करने के लिए स्वतंत्र महसूस ...

उत्तर

7

वैश्विक operator new और operator delete के लिए, यह वास्तव में न तो अधिक भार है और न ही अधिभावी है। को को अपनी परिभाषाओं के साथ डिफ़ॉल्ट, क्रियान्वयन-प्रदान की गई परिभाषाओं को प्रतिस्थापित करने की अनुमति है। सी ++ मानक कहता है (§3.7.3/2):

लाइब्रेरी वैश्विक आवंटन और विध्वंस कार्यों के लिए डिफ़ॉल्ट परिभाषा प्रदान करती है। कुछ वैश्विक आवंटन और विध्वंस कार्यों को बदलने योग्य (18.4.1) हैं। एक सी ++ कार्यक्रम एक प्रतिस्थापन आवंटन या deallocation समारोह की एक परिभाषा प्रदान करेगा। ऐसी कोई फ़ंक्शन परिभाषा लाइब्रेरी में प्रदान किए गए डिफ़ॉल्ट संस्करण को प्रतिस्थापित करती है (17.4.3.4)।

एक वर्ग विशेष के operator new या operator delete, ऑपरेटरों अतिभारित रहे हैं लिए।

+0

तो ओवरलोडिंग और ओवरराइडिंग समान रूप से गलत हैं, जो उपयोग में 50-50 वितरण बताते हैं :-) –

+0

जेम्स: जबकि मुझे लगता है कि आपका लिखा गया सही है, फिर भी आप ग्लोबल ऑपरेटरों को अतिरिक्त (या अलग-अलग)) तर्क। वास्तव में, std lib कम से कम अधिभार के साथ आता है: एक प्लेसमेंट नया और 'नोट्रो' संस्करण। – sbi

+1

@ एसबीआई: ठीक है। खैर, वैश्विक ऑपरेटरों को अधिभारित किया गया है, और प्रत्येक अधिभार को प्रतिस्थापित किया जा सकता है। @ spc-mrn: हाँ, प्रभावी ढंग से। –

संबंधित मुद्दे