सदस्य : लॉगिन |पंजीकरण |अपलोड ज्ञान
खोज
वर्चुअल विधि तालिका
1.कार्यान्वयन
2.उदाहरण [संशोधन ]
सी वाक्यविन्यास में निम्न श्रेणी की घोषणाओं पर विचार करें:


कक्षा बी 1 {
जनता:
  वर्चुअल ~ बी 1 () {}
  शून्य एफ 0 () {}
  आभासी शून्य एफ 1 () {}
  int int_in_b1;
};

कक्षा बी 2 {
जनता:
  आभासी ~ बी 2 () {}
  आभासी शून्य एफ 2 () {}
  int int_in_b2;
};

निम्न वर्ग प्राप्त करने के लिए प्रयोग किया जाता है:


कक्षा डी: सार्वजनिक बी 1, सार्वजनिक बी 2 {
जनता:
  शून्य डी () {}
  शून्य एफ 2 () {} // ओवरराइड बी 2 :: एफ 2 ()
  int int_in_d;
};

और सी कोड का निम्नलिखित टुकड़ा:


बी 2 * बी 2 = नया बी 2 ();
डी * डी = नया डी ();

जीसीसी से जी 3.4.6 ऑब्जेक्ट बी 2 के लिए निम्न 32-बिट मेमोरी लेआउट उत्पन्न करता है:

B2:
   0: बी 2 की आभासी विधि तालिका के सूचक
   4: int_in_b2 का मान

बी 2 की वर्चुअल विधि तालिका:
   0: बी 2 :: एफ 2 ()

और ऑब्जेक्ट डी के लिए निम्न मेमोरी लेआउट:

घ:
   0: डी की आभासी विधि तालिका के लिए पॉइंटर (बी 1 के लिए)
   4: int_in_b1 का मान
   8: डी की आभासी विधि तालिका के लिए पॉइंटर (बी 2 के लिए)
  12: int_in_b2 का मान
  16: int_in_d का मान

कुल आकार: 20 बाइट्स।

डी की वर्चुअल विधि तालिका (बी 1 के लिए):
   0: बी 1 :: एफ 1 () // बी 1 :: एफ 1 () ओवरराइड नहीं है

डी की वर्चुअल विधि तालिका (बी 2 के लिए):
   0: डी :: एफ 2 () // बी 2 :: एफ 2 () डी :: एफ 2 () द्वारा ओवरराइड किया गया है

ध्यान दें कि उन कार्यों में कीवर्ड वर्चुअल को उनकी घोषणा (जैसे कि f0 () और d ()) में नहीं लेते हैं, आमतौर पर vtable में दिखाई नहीं देते हैं। डिफॉल्ट कन्स्ट्रक्टर द्वारा उत्पन्न विशेष मामलों के लिए अपवाद हैं।
बेस क्लास, बी 1 और बी 2 में आभासी विनाशकों को भी ध्यान दें। यह सुनिश्चित करने के लिए आवश्यक है कि डिलीट डी केवल डी के लिए मेमोरी को मुक्त न कर सके, बल्कि बी 1 और बी 2 के लिए भी, यदि डी एक सूचक या बी 1 या बी 2 के संदर्भ में है। उदाहरण को सरल रखने के लिए उन्हें मेमोरी लेआउट से बाहर रखा गया था।
कक्षा डी में विधि f2 () को ओवरराइड करना बी 2 की वर्चुअल विधि तालिका को डुप्लिकेट करके और पॉइंटर को बी 2 :: एफ 2 () में एक सूचक के साथ डी :: एफ 2 () में बदलकर कार्यान्वित किया जाता है।
3.एकाधिक विरासत और thunks
4.मंगलाचरण
5.दक्षता
6.विकल्पों के साथ तुलना
[अपलोड अधिक अंतर्वस्तु ]


सर्वाधिकार @2018 Lxjkh