virual तालिका कम से कम 1 आभासी समारोह बेस वर्ग, किसी भी तरह से करने के लिए जो विरासत में मिला दिया जाएगा में वहाँ केवल अगर बनाया जाएगा। व्युत्पन्न कक्षाएं। इससे कोई फर्क नहीं पड़ता कि आप व्युत्पन्न कक्षा बी से वर्चुअल कीवर्ड को हटाते हैं क्योंकि पहले से ही आपके पास ए में वर्चुअल मजेदार() है, इसलिए वर्चुअल टेबल की संख्या 2 (प्रति वर्ग आधार के रूप में) और वर्चुअल की संख्या होगी पीटीआर भी प्रति ऑब्जेक्ट आधार के रूप में 2 होगा।ए --- v_ptr * के लिए VATABLE *, ए :: मजेदार()
& बी --- V_ptr * (जिसे ए से विरासत में मिला था) के लिए VTABLE, बी :: मजेदार()/* बी दोनों को एक्सेस है :: मजेदार & बी का मज़ा(), लेकिन चूंकि हमने ए :: मजेदार() का उल्लेख किया है क्योंकि वर्चुअल बी की आभासी तालिका फ़ंक्शन के सबसे व्युत्पन्न संस्करण से भरा है, मजेदार(), जो बी :: मजेदार() के अलावा कुछ भी नहीं है। उम्मीद है कि यह साफ करता है उर शक
स्रोत
2013-04-03 20:14:58
अब अगर मैं नीचे अपना पीजीएम संशोधित करता हूं: मैं व्युत्पन्न वर्ग से वर्चुअल कीवर्ड को हटा देता हूं। अब कितने vtables बनाया जाएगा? – CodeCodeCode
@Pal - कोई फर्क नहीं पड़ता, फ़ंक्शन अभी भी वर्चुअल है। –
@ बो पर्सन: फ़ंक्शन आभासी है, लेकिन क्या व्युत्पन्न कक्षा के लिए भी एक vtable बनाया जाएगा? – CodeCodeCode