VS2005之virtual继承对象模型

VS2005virtual继承对象模型

by Nathan.Yu <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><chsdate w:st="on" year="2008" month="12" day="11" islunardate="False" isrocdate="False"><span lang="EN-US">2008-12-11</span></chsdate>

空类

类声明:

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><shapetype id="_x0000_t75" stroked="f" filled="f" path="[email protected]@[email protected]@[email protected]@[email protected]@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 180.75pt; HEIGHT: 108pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image001.png"></imagedata></shape>

VS2005之virtual继承对象模型

对象定义:

<shape id="_x0000_i1026" style="WIDTH: 231pt; HEIGHT: 80.25pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image003.png"><font color="#000000" size="5"></font></imagedata></shape>

VS2005之virtual继承对象模型

此时,对象xyza的地址、大小及其内容如下:

VS2005之virtual继承对象模型

对象在堆栈中的分布

VS2005之virtual继承对象模型

可见:

l x的大小为一个字节,其内容初始化为0xcc

l yz的大小为4个字节,初始化为一个指针。

l a的大小为8个字节,初始化为2个指针。这些指针指向一个地址,该地址的内容初始化为0

这个指针是干什么用的呢?不解。。。。。。。。

包含数据成员和虚函数的类

类声明:

VS2005之virtual继承对象模型

对象定义

VS2005之virtual继承对象模型

此时,对象xyza的地址、大小及其内容如下:

VS2005之virtual继承对象模型

对象在堆栈中的分布

VS2005之virtual继承对象模型

(待续。。。。。。)