deep_c++:对象的数据成员

来源:互联网 发布:数据库事务管理 编辑:程序博客网 时间:2024/04/28 04:24
class X{    virtual void vf(){};};class X2:virtual public X{  virtual void vf(){};};class X3:virtual public  X2{     virtual void vf(){};}

X3将包含有一个Vptr,两个Vbptr。确切的说这两个Vbptr一个属于X3,一个属于X3的子对象X2,X3通过其Vbptr找到子对象X2,而X2通过其Vbptr找到X。

其中差别在于vptr通过一个虚函数表可以确切地知道要调用的函数,而Vbptr通过虚基类表只能够知道其虚基类子对象的偏移量。这两条规则是由虚函数与虚拟继承的实现方式,以及受它们的存取方式和复制控制的要求决定的。

0 0