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

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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值