सदस्य : लॉगिन |पंजीकरण |अपलोड ज्ञान
खोज
वर्चुअल विधि तालिका
1.कार्यान्वयन [संशोधन ]
किसी ऑब्जेक्ट की प्रेषण तालिका में ऑब्जेक्ट की गतिशील रूप से बाध्य विधियों के पते होंगे। विधि कॉल को ऑब्जेक्ट की प्रेषण तालिका से विधि का पता लाकर किया जाता है। प्रेषण तालिका एक ही कक्षा से संबंधित सभी वस्तुओं के लिए समान है, और इसलिए आम तौर पर उनके बीच साझा की जाती है। टाइप-संगत कक्षाओं से संबंधित ऑब्जेक्ट्स (उदाहरण के लिए एक विरासत पदानुक्रम में भाई बहन) में एक ही लेआउट के साथ प्रेषण तालिकाएं होंगी: किसी दिए गए विधि का पता सभी प्रकार-संगत वर्गों के लिए उसी ऑफसेट पर दिखाई देगा। इस प्रकार, किसी दिए गए प्रेषण तालिका ऑफसेट से विधि का पता लाने से ऑब्जेक्ट की वास्तविक कक्षा से संबंधित विधि मिल जाएगी।
सी मानकों को यह बिल्कुल जरूरी नहीं है कि गतिशील प्रेषण कैसे कार्यान्वित किया जाना चाहिए, लेकिन कंपाइलर आम तौर पर समान मूल मॉडल पर मामूली विविधता का उपयोग करते हैं।
आम तौर पर, कंपाइलर प्रत्येक वर्ग के लिए एक अलग vtable बनाता है। जब कोई ऑब्जेक्ट बनाया जाता है, तो वर्चुअल टेबल पॉइंटर, vpointer या VPTR नामक इस vtable के पॉइंटर को इस ऑब्जेक्ट के छिपे हुए सदस्य के रूप में जोड़ा जाता है। इस प्रकार, कंपाइलर को अपनी कक्षा के vtable के पते पर एक नई वस्तु के vpointer शुरू करने के लिए प्रत्येक वर्ग के रचनाकारों में "छिपा" कोड उत्पन्न करना होगा।
कई कंपाइलर्स vpointer ऑब्जेक्ट के अंतिम सदस्य के रूप में रखते हैं; अन्य कंपाइलर्स वस्तु के पहले सदस्य के रूप में vpointer जगह; पोर्टेबल स्रोत कोड किसी भी तरह से काम करता है। उदाहरण के लिए, जी ने पहले ऑब्जेक्ट के अंत में vpointer रखा था।
[C]
2.उदाहरण
3.एकाधिक विरासत और thunks
4.मंगलाचरण
5.दक्षता
6.विकल्पों के साथ तुलना
[अपलोड अधिक अंतर्वस्तु ]


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