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

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

1.1. 虚成员函数

1.1.1. 单一继承下的虚成员函数

0001 class Point

0002 {

0003 public :

0004 virtual ~Point();

0005 virtual Point &mult(float) = 0;

0006 float X() const { return _x };

0007 virtual float Y() const { return 0 };

0008 virtual float Z() const { return 0 };

0009 protected :

0010 Point(float x = 0.00)

0011 float _x;

0012 };

0013 class Point2d : public Point

0014 {

0015 public :

0016 Point2d (float x = 0.00, float y = 0.00) : Point(x), y(_y) {} ;

0017 virtual ~Point2d();

0018 //改写基类的虚函数

0019 Point2d &mult(float);

0020 float Y() const { return _y };

0021 protected :

0022 float _y;

0023 };

0024 class Point3d : public Point2d

0025 {

0026 public :

0027 Point3d (float x=0.00, y=0.00, z=0.00) : Point2d(x, y), z(_z) {};

0028 virtual ~Point3d();

0029 //改写基类的虚函数

0030 Point3d &mult(float);

0031 float Z() const { return _z };

0032 protected :

0033 float _z;

0034 };

其对象模型如下:

Point object Point Virtual Function Talbe

_x

_vptr_Point

#0

type_info for Point

#1

Point::~Point()

#2

pure vitual called(占位)

#3

Point::y()

#4

Point::z()

Point2d object Point2d Virtual Function Talbe

Point subobject

_x

_vptr_Point

_y

#0

type_info for Point2d

#1

Point2d::~Point2d()

#2

Point2d::mult()

#3

Point2d::y()

#4

Point2d::z()

Point3d object Point3d Virtual Function Talbe

Point2d subobject

_x

_vptr_Point

_y

_z

#0

type_info for Point3d

#1

Point3d::~Point3d()

#2

Point3d::mult()

#3

Point2d::y()//继承

#4

Point3d::z()

Point *ptr;

……

ptr->z();

将被转化为(*ptr->vptr[4])(ptr);

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