C++ vs Java constructors -
जॉन सी मिशेल के अनुसार - प्रोग्रामिंग भाषाओं में अवधारणाओं,
[... ] जावा गारंटी देता है कि जब कोई ऑब्जेक्ट बनाया जाता है तो एक कन्स्ट्रक्टर को बुलाया जाता है। [...]
यह एक जावा विशेषताओं के रूप में बताया गया है जो इसे अपने व्यवहार में सी ++ से भिन्न बनाता है तो मुझे तर्क होना चाहिए कि कुछ मामलों में सी ++ क्लास के लिए किसी भी कंस्ट्रक्टर को कॉल नहीं किया जाता है, भले ही उस वर्ग के लिए एक ऑब्जेक्ट बनाया गया हो।
मुझे लगता है कि ऐसा होता है जब विरासत होता है, लेकिन मैं एक उदाहरण समझ नहीं सकता
यदि आपका वर्ग परिभाषित करता है कम से कम एक कन्स्ट्रक्टर, तो भाषा आपको किसी कंसट्रक्टर को कॉल किए बिना उस प्रकार के ऑब्जेक्ट का निर्माण करने की अनुमति नहीं देगा।
यदि आपकी कक्षा किसी निर्माता को परिभाषित नहीं करती है, तो सामान्य नियम यह है कि कंपाइलर द्वारा जेनरेट किया गया डिफ़ॉल्ट कन्स्ट्रक्टर को बुलाया जाएगा।
जैसा कि अन्य पोस्टर का उल्लेख है, यदि आपकी कक्षा एक पीओडी प्रकार है, ऐसे मामले हैं जहां आपका ऑब्जेक्ट अप्रकाशित नहीं छोड़ा जाएगा। लेकिन ऐसा इसलिए नहीं है क्योंकि कंपाइलर ने "निर्माता को कॉल नहीं किया" ऐसा इसलिए है क्योंकि है कोई कन्स्ट्रक्टर नहीं है (या इसमें कुछ भी नहीं है), और कुछ विशेष रूप से नियंत्रित किया जाता है लेकिन फिर, पीओडी प्रकार जावा में मौजूद नहीं हैं, इसलिए वास्तव में इसकी तुलना नहीं की जा सकती।
आप सकते हैं भी चीजों के आसपास हैक कर सकते हैं ताकि कन्स्ट्रक्टर को फोन नहीं किया जाता। उदाहरण के लिए, char
के बफर को आवंटित करें, पहले अक्षर में एक सूचक लें और ऑब्जेक्ट प्रकार में डालें। ज़्यादातर मामलों में अपरिभाषित व्यवहार, ज़ाहिर है, इसलिए यह वास्तव में "अनुमति" नहीं है, लेकिन आमतौर पर कंपाइलर शिकायत नहीं करेगा।
लेकिन नीचे की रेखा यह है कि जो भी पुस्तक बनाता है जिनके बारे में विशिष्ट कंधे के मामलों का उल्लेख किया जा रहा है, वे स्पष्ट रूप से कचरा से भरे हुए हैं। फिर, ज्यादातर लोगों को सी ++ के बारे में लिखना वास्तव में भाषा के बारे में बहुत कुछ नहीं जानता है, इसलिए इसे आश्चर्यचकित नहीं होना चाहिए।
Comments
Post a Comment