निम्न कोड के बारे में प्रश्न किताब से कर रहे हैंसी ++ आभासी विरासत
#include <iostream>
using namespace std;
class X{};
class Y: public virtual X{};
class Z: public virtual X{};
class A: public Y, public Z{};
int main()
{
cout<<sizeof(X)<<" "<<sizeof(Y)<<" "<<sizeof(Z)<<" "<<sizeof(A)<<endl;
return 0;
}
अपने कंप्यूटर (विंडोज, VS2010) में "सी ++ ऑब्जेक्ट मॉडल के अंदर", उत्पादन होता है:
Here're मेरे सवालों
1, sizeof (एक्स) = 1
पुस्तक का कहना है जब एक्स प्रकार दो उदाहरण उत्पन्न करता है, तो xa और xb कहें। संकलन ए में एक बाइट डालें ताकि xa और xb के पास अलग पता हो। मैं कारणों को काफी समझ नहीं पा रहा हूं।
2, sizeof (वाई) = 4
आभासी विरासत उपयोग करके, हम एक अतिरिक्त आभासी सूचक होगा? मुझे लगता है कि यह बहुरूपता में वर्चुअल पॉइंटर से अलग हो सकता है। क्या कोई मुझे वाई के लिए मेमोरी लेआउट दे सकता है?
धन्यवाद!
प्रश्न के प्रति एक प्रश्न कृपया पहले प्रश्न के लिए –
देखें, http://stackoverflow.com/questions/621616/c-what-is-the-size-of-an- ऑब्जेक्ट ऑफ द रिक्त-क्लास? rq = 1 –
मुझे लगता है कि आपका मुख्य प्रश्न यह है कि वाई गैर-पॉलीमोर्फिक क्लास एक्स से प्राप्त करने के लिए आभासी विरासत का उपयोग करता है, और वाई स्वयं गैर-पॉलीमोर्फिक है, क्या वायरलल उत्तराधिकारी स्वयं ही कारण बन जाएगा वाई के पास एक वी-टेबल है, इस प्रकार इसका आकार 4 है .. – CashCow