2012-09-07 37 views
6
  1. वर्चुअल विरासत vTable का उपयोग करता है? यदि हां या नहीं, तो यह कैसे लागू किया गया
  2. वर्चुअल विरासत स्मृति में कैसे व्यवहार करता है?
  3. आभासी विरासत

के लिए किसी भी अन्य विकल्प वास्तव में एक वैचारिक स्पष्टीकरण की सराहना करते हैं।आभासी विरासत कैसे काम करती है?

+0

कार्यान्वयन परिभाषित किया गया। – ildjarn

+0

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

+1

उपरोक्त कहने के बाद, यह नहीं सोचें कि क्यू अप्रासंगिक है या असली क्यू नहीं है। सभी कंपाइलर एक समान तंत्र का उपयोग करते हैं और हालांकि कार्यान्वयन के विवरण को जानने के लिए इसकी आवश्यकता नहीं है, लेकिन इसे जानने में कोई दिक्कत नहीं होती है। इसके अलावा, इस क्यू को कई बार पूछा जाता है कि यह एक अच्छा सी ++ करेगा - अगर कोई समय निकालता है और इसे दृढ़तापूर्वक उत्तर देता है। –

उत्तर

1

संकलक के आधार पर वर्चुअल विरासत को विभिन्न तरीकों से लागू किया गया है।

1) हां, वीसी और जीसीसी दोनों वीटीबल पॉइंटर का उपयोग करते हैं। लेकिन वीसी में वर्चुअल बेस पॉइंटर के रूप में एक और पॉइंटर रेफरी है।

2) शास्त्रीय वर्चुअल विरासत के लिए, जैसे बाएं < शीर्ष; दाएं < शीर्ष; नीचे < बाएं और दाएं ढेर इस तरह होना चाहिए:

Left.vptr // -> to its vtable 

Left::element_in_left 

Right.vptr 

Right::element_in_right 

Bottom::element_in_bottom 

Top::element_in_top 

कार्यक्रम vtable को खोजने के लिए, जीसीसी के लिए, वहाँ एक आभासी आधार व्यवहार्य में ऑफसेट मूल्य है vptr का उपयोग करें। vptr + बेस ऑफसेट माता-पिता का पता देगा।

3) मुझे यकीन नहीं है कि आपका क्या मतलब है। सी ++ कंपाइलर्स में इसे लागू करने के कई तरीके हैं। और अन्य भाषाओं में कार्यों को बांधने के उनके तरीके हैं।

+0

आपको बहुत बहुत धन्यवाद! ऐसा लगता है कि जटिल छोड़ दिया! क्या आप इस बारे में पढ़ने के लिए मुझे कुछ सरल लेख या पुस्तक की सिफारिश कर सकते हैं। –

+0

@NayanaAdassuriya मैंने इन ज्ञानों को अपनी मूल भाषा पोस्ट में पढ़ा है, इसलिए मैं अंग्रेजी में किताबों से परिचित नहीं हूं। मुझे लगता है कि आप Google में "सी ++ मेमोरी लेआउट आभासी विरासत" की खोज कर सकते हैं, वहां बहुत सारी पोस्ट हैं। – halfelf