该文为http://blog.csdn.net/webScaler/archive/2011/04/05/6302997.aspx的续篇
若对虚继承不是很了解,可以先参考下文
http://lingxiaoyequ.blog.163.com/blog/static/21639050200941941730984/
4
单虚继承
测试代码:
虚继承中多了一个
vbptr
指向一个
vbtbl
,里面存的是虚基类的偏移量,
vbtbl
第一项为该
vbptr
到该对象中该类部分首地址的偏移量,因为
vbptr
一般都在
vptr
下面,所以一般都是
-4
,表示成十六进制就是
0XFF FF FF FC; vbtbl
第二项为该类的第一个虚基类相对于
vbptr
的偏移量,本例中为
8
。
虚继承中派生类和父类不再共用一个
vptr
,而是各自都有一个
vptr
,但是都是指向派生类的
vtbl
,只是偏移量不一样。
5
多虚继承
测试代码
这种情况是单虚继承的复杂版,没什么变化点,只是量变多了而已。
6
菱形虚继承
测试代码
这个最复杂:
1>Base1
和
Derived
共用了一个
vptr
,其他每个都有一个
vptr
,指向的是派生类的不同位置;
2>
每个虚继承自
Base
类的类都具有一个
vbptr
和一个
vbtbl
。