स्ट्रॉस्ट्रप ने कहा कि सी ++ एक एक्स्टेंसिबल होना चाहिए, लेकिन परिवर्तनीय भाषा नहीं होनी चाहिए।
डॉट (विशेषता पहुंच) ऑपरेटर को ओवरलोडिंग की अनुमति देने के लिए भाषा के मूल के बहुत करीब के रूप में देखा गया था।
The Design and Evolution of C++, पृष्ठ 242, सेक्शन 11.5.2 स्मार्ट संदर्भ देखें।
जब मैं ऑपरेटर ->
की ओवरलोडिंग की अनुमति देने का फैसला किया, मैं स्वाभाविक रूप से माना जाता है कि क्या ऑपरेटर .
इसी तरह अतिभारित किया जा सकता है।
समय में, मैं निम्नलिखित तर्क निर्णायक माना: अगर obj
एक वर्ग वस्तु है तो obj.m
उस वस्तु की क्लास के हर सदस्य m
के लिए एक अर्थ नहीं है। हम बिल्ट-इन ऑपरेशंस को फिर से परिभाषित करके भाषा को व्यवहार्य बनाने की कोशिश नहीं करते हैं (हालांकि उस नियम का उल्लंघन =
के लिए सख्त आवश्यकता से, और &
के लिए उल्लंघन किया गया है)।
यदि हमें कक्षा X
के लिए ओवरलोडिंग की अनुमति है, तो हम सामान्य माध्यम से X
के सदस्यों तक पहुंचने में असमर्थ होंगे; हमें एक पॉइंटर और ->
का उपयोग करना होगा, लेकिन ->
और &
को फिर से परिभाषित किया जा सकता है। मैं एक एक्स्टेंसिबल भाषा चाहता था, एक उत्परिवर्तनीय नहीं।
ये तर्क भारी हैं, लेकिन निर्णायक नहीं हैं। विशेष रूप से, 1 99 0 में जिम एडकॉक ने ऑपरेटर .
बिल्कुल ऑपरेटर ->
के ओवरलोडिंग की अनुमति देने का प्रस्ताव दिया।
इस उद्धरण में "मैं" Bjarne Stroustrup है। आप उससे अधिक आधिकारिक नहीं हो सकते हैं।
यदि आप वास्तव में सी ++ को समझना चाहते हैं (जैसा कि "यह ऐसा क्यों है"), आपको पूरी तरह से इस पुस्तक को पढ़ना चाहिए।
क्या आप एक उदाहरण दे सकते हैं जब आप '।' को ओवरराइड करना चाहते हैं। ऑपरेटर? –
आम तौर पर, उपयोग केस "स्मार्ट संदर्भ" है। प्रॉक्सी का एक प्रकार – ddaa
@Gamecat: [this] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1671.pdf) के माध्यम से पढ़ें 'ऑपरेटर' को अधिभारित करने की क्षमता जोड़ने का प्रस्ताव। 'ऑपरेटर। *', इसमें कुछ उदाहरण हैं। – Mankarse