C++对象模型之函数成员(4)

王朝c/c++·作者佚名  2006-01-08
宽屏版  字体: |||超大  

1.1.1. 虚拟继承下的虚成员函数

0001 class Point2d

0002 {

0003 public :

0004 Point2d(float x=0.00, float y=0.00);

0005 virtual ~Point2d();

0006 virtual void mumble();

0007 virtual float Z() {return 0;};

0008 protected :

0009 float _x, _y;

0010 };

0011 class Point3d : public virtual Point2d

0012 {

0013 public :

0014 Point3d(float x=0.00, float y=0.00, float z=0.00);

0015 virtual ~Point3d();

0016 virtual float Z() {return _z};

0017 protected :

0018 float _z;

0019 };

对象模型如下:

Point2d Object virtual Table Point2d

_x

_y

vptr_2d

#0

type_info for Point2d

#1

Point2d::~Point2d()

#2

Point2d::mumble()

#3

Point2d::z()

Point3d Object virtual Table Point3d

_z

vptr_3d

_x

_y

vptr_2d

#0

type_info for Point3d

#1

Point3d::~Point3d()

#2

Point2d::mumble()

#3

Point3d::z()

virtual Table Point2d Subobject for Point3d

#0

type_info for Point3d

#1

Point3d::~Point3d()

#2

Point2d::mumble()

#3

Point3d::z()

从上述模型可以看出,虚拟继承的虚函数调用其指针调整极其复杂,因此一般情况下,我建议不要再虚基类中声明非静态的数据成员,以降低指针调整的复杂性。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有