c++ - Strange behavior of run-time type information -


मेरे पास दो वर्ग बेस और derived है: <: >

  कक्षा आधार {सार्वजनिक:}; वर्ग व्युत्पन्न: सार्वजनिक आधार {सार्वजनिक:};  

और मुख्य कार्य:

  int main () {base * ptr = new derived; Std :: cout & lt; & lt; टाइपआईड (* ptr) .name () & lt; & lt; endl; पीटीआर हटाएं; प्रणाली ( "थामने"); }  

कार्यक्रम आउटपुट वर्ग आधार से पता चलता है, जहां मुझे उम्मीद थी कि यह class derived दिखाएगा। लेकिन जब मैंने बेस वर्ग में एक आभासी विधि जोड़ दी है, अब आउटपुट दिखाता है class derived !

RTTI को कम से कम एक आभासी विधि की आवश्यकता क्यों है?

क्योंकि भाषा विनिर्देश ऐसा कहता है आरटीटीआई केवल बहुरूपिक प्रकारों पर काम करता है; वह है, आभासी कार्यों के साथ प्रकार अन्य प्रकारों के लिए, typeid अपनी तर्क के स्थिर प्रकार के लिए प्रकार की जानकारी देता है।

यदि आप इसके लिए तर्क के लिए पूछ रहे हैं: इसकी एक रन-टाइम लागत है आमतौर पर, प्रति-वर्ग मेटाडेटा के प्रत्येक ऑब्जेक्ट में एक पॉइंटर, जो आभासी प्रेषण और RTTI दोनों का समर्थन करता है), और यदि आपको उस कीमत को सभी प्रकार के लिए भुगतान करना पड़ा, तो आप शर्म की बात होगी कि आप उन पर आरटीटीआई का उपयोग करना चाहते हैं या नहीं ।


Comments

Popular posts from this blog

python - Overriding the save method in Django ModelForm -

html - CSS autoheight, but fit content to height of div -

qt - How to prevent QAudioInput from automatically boosting the master volume to 100%? -