सी ++ प्रोग्राम नीचे "एसीसीए" की गणना कैसे करता है?
दिखाया गया पहला पत्र 'ए' है। यह आउटपुट इस लाइन से संबंधित है:
Base obj;
... जिसमें आप बेस का एक नया उदाहरण बना रहे हैं।
अगली पंक्ति थोड़ा जटिल है:
obj = obj+obj;
आम तौर पर, इस obj.operator+(obj)
में अनुवाद किया है, लेकिन आप ऑपरेटर की जरूरत नहीं है + वर्ग Base
में अतिभारित है, तो इस अनुवाद मान्य नहीं है। शेष संभावना यह है कि ऑपरेटर + वास्तव में संख्यात्मक जोड़ ऑपरेटर है।
और हाँ, इस के बाद से आप int
करने के लिए एक डाली प्रदान की है, संभव है। तो int
में समीकरण की प्रत्येक अवधि को परिवर्तित करना संभव है ... और इसलिए operator int
को दो बार बुलाया जाता है। वास्तविक समय operator int
कहा जाता है जिसे सक्रिय ऑप्टिमाइज़ेशन पर निर्भर करता है। उदाहरण के लिए, कंपाइलर को एहसास हो सकता है कि दोनों शर्तें समान हैं, और फिर operator int
को पहली बार कॉल करने के बाद एक नया अस्थायी बनाएं। उस स्थिति में, आप सीसी के बजाय सीए देखेंगे।
अंत में, काम अभिव्यक्ति obj.operator=(temp)
निष्पादित किया जाता है। और यहां कीवर्ड temp है। काम करने के लिए defaultoperator=
के लिए, क्योंकि यह अधिभारित नहीं है, इसलिए आपको दाईं ओर Base
ऑब्जेक्ट होना चाहिए। यह वास्तव में संभव है, क्योंकि Base
नए उदाहरण बनाने के लिए int
का उपयोग करता है। ठीक है, तो obj + obj
का परिणाम एक int
(कहते हैं कि यह कहा जाता है 'एक्स') नंबर था, और संकलक, वर्ग Base
की एक अस्थायी वस्तु जो संख्या एक्स साथ निर्माण किया है बनाता है के रूप में निम्न पंक्ति मार डाला गया था:
Base temp(x);
तरह से अंतिम पत्र देखा एक 'ए' है यही कारण है कि। दोबारा, कई कंपाइलर कुछ मामलों पर अस्थायी भवनों से बच सकते हैं, इसलिए अंत में 'ए' नहीं देखना संभव है।
ध्यान दें कि यह पंक्ति:
obj = obj + obj
इस प्रकार में विघटित था:
int x = ((int) obj) + ((int) obj);
Base temp(x);
obj = temp;
अंतिम शिक्षा का मानो स्मृति जिसमें obj
बैठता है की सामग्री के साथ कब्जा कर लिया हो जाएगा परिणाम है temp
(यह डिफ़ॉल्ट प्रतिलिपि कन्स्ट्रक्टर की भूमिका है, जो कक्षा के प्रत्येक सदस्य के लिए operator=
निष्पादित करती है, फिर से 'तीन का नियम' देखें)।
ऑपरेटर ओवरलोडिंग के मुद्दों है कि हो सकता है अगर आप भाषा के एक कम या ज्यादा गहरा ज्ञान की जरूरत नहीं है अनुमान नहीं कर रहे हैं, जैसा कि आप देख सकते हैं की एक बहुत कुछ शामिल है। इस बात को ध्यान में रखें कि जावा जैसी भाषाएं पूरी तरह से इसका उपयोग रोकती हैं, जबकि सी # इसे नियंत्रित परिप्रेक्ष्य से अनुमति देता है।
एफवाईआई; यह पाठक को एक अभ्यास के रूप में, एसीसीए बनाने के लिए बनाया गया एक निर्माण है। –