पर विचार करें नीचे दिए गए कोड:सी ++: वर्चुअल विरासत
#...
class A {};
class B: public A{};
class C: virtual public A{};
class D: virtual public C{};
// No More Classes
...
int _tmain(int argc, _TCHAR* argv[]) {
cout<<sizeof(A)<<" ";
cout<<sizeof(B)<<" ";
cout<<sizeof(C)<<" ";
cout<<sizeof(D)<<".";
...
}
ओ/पी: 1 1 4 8.
प्रश्न:
- sizeof (ए) = 1byte, और इस स्थान कंपाइलर/हमें के लिए महत्वपूर्ण क्या पकड़ो।
- क्यों संकलक सी क्लास ऑब्जेक्ट में vptr जोड़ने के लिए परेशान क्यों होता है जब वास्तव में कुछ भी नहीं रहता है।
- यदि हमारे पास कोई वर्चुअल फ़ंक्शन नहीं है, तो कंपाइलर व्युत्पन्न वस्तुओं के लिए एक अतिरिक्त Vptr जोड़ रहा है।
*। यह मेरा पहला प्रश्न है, अगर आपको कुछ गलत लगता है तो कृपया मुझे सही करें।
यहां एक पहले प्रश्न के लिए: एक अच्छी, अच्छी तरह से स्वरूपित और आत्म-व्याख्यात्मक पोस्ट के लिए +1। –
मुझे वास्तव में कोई प्रश्न नहीं दिखाई देता है, केवल बयानों की एक सूची। –
@ जोचिमपिलबोर्ग - "2. क्यों कंपेलर सी क्लास ऑब्जेक्ट में वीपीआरआर जोड़ने की परेशानी क्यों करता है जब वास्तव में कुछ भी नहीं रहता है"। मुझे लगता है कि '3.'' .2' जैसा ही है। और '1.' सबसे अधिक संभावना है - यह दर्शाता है कि ओपी जानता है कि परिणाम' 1' क्यों है। –