क्या है अपकास्टिंग / डाउनकास्टिंग?


16

बहुरूपता के बारे में सीखते समय आप आमतौर पर ऐसा कुछ देखते हैं

class Base { int prv_member; virtual void fn(){} }
class Derived : Base { int more_data;  virtual void fn(){} }

क्या है अपकास्टिंग या डाउनकास्टिंग? है (Derived*)base_ptr;एक Upcast या खिन्न?

मैं इसे अपकास्ट कहता हूं क्योंकि आप आधार से कुछ अधिक विशिष्ट में चले जा रहे हैं। अन्य लोगों ने मुझे बताया कि यह एक डाउनकास्ट है क्योंकि आप शीर्ष के मूल होने के साथ किसी चीज़ में एक पदानुक्रम नीचे जा रहे हैं। लेकिन दूसरे लोग इसे कहते हैं जो मैं इसे कहता हूं।

जब एक आधार ptr को व्युत्पन्न ptr में परिवर्तित किया जाता है, तो इसे अपकास्टिंग या डाउनकास्टिंग कहा जाता है? और अगर कोई आधिकारिक स्रोत से लिंक कर सकता है या समझा सकता है कि इसका नाम महान से अधिक क्यों है।



3
यह कोई नकल नहीं है। यह सवाल पूछता है कि यह क्या है, दूसरा पूछता है कि नामों के साथ कौन आया था।
रॉबर्ट हार्वे

1
@RobertHarvey "और अगर कोई आधिकारिक स्रोत से लिंक कर सकता है या समझा सकता है कि इसका नाम महान से अधिक क्यों है।" , लेकिन सहमति व्यक्त की, जिसे प्रश्न का केवल एक हिस्सा माना जा सकता है ।
स्टीवन ज्यूरिस

व्युत्पन्न वर्ग में उस आभासी के लिए बाहर देखो । आप यह नहीं लिखना चाहते कि जब तक आप व्युत्पन्न वर्ग को एक बार और प्राप्त न करें। शून्य fn () {...} पर्याप्त है।
अपोलो

JustaPro: जोड़ना virtualअनावश्यक है लेकिन "चोट" नहीं करता है। क्या आप इस बात पर विस्तार से विचार कर सकते हैं कि आपको उस संदर्भ में इसका उपयोग क्यों नहीं करना चाहिए?
निक बुगालिस

जवाबों:


17
Is (Derived*)base_ptr; an upcast or downcast?

यह एक डाउनकास्ट है: इस पर विकिपीडिया का लेख देखें ।

में ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग , downcasting या प्रकार शोधन का कार्य है कास्टिंग इसकी व्युत्पन्न वर्ग से एक के लिए एक आधार वर्ग के लिए एक संदर्भ।

कई प्रोग्रामिंग भाषाओं में, आरटीटीआई के माध्यम से यह जांचना संभव है कि क्या संदर्भित वस्तु का प्रकार वास्तव में एक है या इसे एक प्रकार का डाली जा रहा है, और इस तरह एक त्रुटि जारी होती है यदि यह मामला नहीं है।

दूसरे शब्दों में, जब बेस क्लास ( पैरेंट क्लास ) के एक वेरिएबल में व्युत्पन्न वर्ग ( चाइल्ड क्लास ) का मान होता है , तो डाउनकास्ट संभव हो सकता है ...


9

अधिकांश भाषाओं में (जहाँ तक मुझे पता है) सामान्यीकरण की जातियाँ स्वचालित रूप से की जाती हैं। इसलिए, आमतौर पर यदि आप एक पदानुक्रम के भीतर एक कास्ट के बारे में बात करते हैं तो आप एक विशेषज्ञ कास्ट का उल्लेख कर रहे हैं। दो प्रकारों को अलग करने की इच्छा रखने वाले ज्यादातर लोगों को IMHO विशेषज्ञ कास्ट डाउनकास्ट कहते हैं क्योंकि वे वंशानुक्रम पदानुक्रम को एक पेड़ के रूप में सोचते हैं। और कंप्यूटर विज्ञान में जड़ को शीर्ष पर होने के लिए चित्रित किया गया है। इसके पीछे का कारण या तो एक सम्मेलन है, या, शायद, कंप्यूटर वैज्ञानिकों के बीच जीव विज्ञानियों के लिए एक गहरी जड़ें हैं। (सभी सज़ा का इरादा है।)

संपादित करें: शायद यह एक शीर्ष निहित घृणा है।


LOL को +1 :) होना चाहिए।

2

पृष्ठ के शीर्ष पर "आधार" और तल पर पत्तियों के साथ एक पेड़ को खींचने के सामान्य तरीके के बारे में सोचें। यदि आप अपने वर्ग पदानुक्रम का इस तरह प्रतिनिधित्व करते हैं, शीर्ष वर्ग के आधार के साथ और नीचे कहीं पत्ते हैं, तो अप-कास्टिंग और डाउन-कास्टिंग शाब्दिक बन जाते हैं - ऐसा कुछ जो पृष्ठ को पत्ती से आधार की ओर ले जाता है, एक ऊपर है- डाली और एक पत्ता की ओर आधार से पृष्ठ को नीचे ले जाने वाली चीज़ एक डाउन-कास्ट है।


2
लेकिन पेड़ ऊपर की ओर जाते हैं और उनकी चड्डी मिट्टी से निकलती है। (यही कारण है कि मैं सोच को बनाए रखता हूं)

@ acidzombie24: लेकिन कंप्यूटर विज्ञान की पुस्तकों में, आप पाएंगे कि पेड़ सामान्य रूप से खींचे जाते हैं जैसा कि मैंने वर्णन किया है, शीर्ष पर जड़ के साथ।
जेरी कॉफिन

मुझे पता है लेकिन मैं सिर्फ मजाकिया था। पेड़ (असली वाले) और आधार (नींव की तरह और मेरे पैरों के नीचे) इसके बारे में सोचने के ऐसे बुरे तरीके हैं :(! +1

5
@ acidzombie24: ऑस्ट्रेलिया में पेड़ों के बारे में सोचें।
मार्टिन न्यूयॉर्क
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.