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

原创 2004年01月27日 21:09:00

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  };<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

     其对象模型如下:

        

         Point object                                     Point Virtual Function Talbe

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />_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);

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

第三章 函数成员1.1.   成员函数的三种调用方式1.1.1. 非静态成员函数非静态成员函数的效率和非成员函数相同,也就是说float magnitude(const Point3d * _this...
  • wxcwuxuchun
  • wxcwuxuchun
  • 2004年01月27日 21:09
  • 1139

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

1.1.1. 多重继承下的虚成员函数0001   class Base10002   {0003   public :0004     Base1();0005   virtual ~Base1();...
  • wxcwuxuchun
  • wxcwuxuchun
  • 2004年01月27日 21:09
  • 742

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

1.1.   指向成员函数的函数指针1.1.1. 静态成员函数指针double (Point::*coord)() = &Point::x;coord指向的是x的实际地址。1.1.2. 非虚拟非静态成...
  • wxcwuxuchun
  • wxcwuxuchun
  • 2004年01月27日 21:09
  • 1012

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

1.1.1. 虚拟继承下的虚成员函数0001   class Point2d0002   {0003   public :0004     Point2d(float x=0.00, float y=...
  • wxcwuxuchun
  • wxcwuxuchun
  • 2004年01月27日 21:09
  • 695

C++成员变量指针和成员函数指针

深度探索C++对象模型这本书还有提到C++类的成员变量指针和成员函数指针,虽然在实际开发中用的不多,但是还是需要理解下。一:成员变量指针1.1 非静态成员指针类成员变量指针,实际上并不是真正意义上的指...
  • LaoJiu_
  • LaoJiu_
  • 2017年04月01日 18:00
  • 960

C++ - 对象模型之 成员函数调用

C++对象模型目录 C++ - 对象模型之 编译器何时才会自行添加构造函数 C++ - 对象模型之 内存布局 C++ - 对象模型之 成员函数调用 C++ - 对象模型...
  • Gykimo
  • Gykimo
  • 2013年02月23日 14:42
  • 2097

对象模型~

                                          (VC6实现的C++对象模型)              在C++对象模型中,类成员的分布情况:1)        ...
  • ihavenoidea
  • ihavenoidea
  • 2005年10月01日 21:51
  • 1077

[读书笔记] 深入探索C++对象模型-第一章《关于对象》

最新在看深入探索C++对象模型(Inside C++ object model),看的同时针对一些之前没有留意或者理解不深的内容整理一下读书笔记,方便之后复习,也希望可以帮助到有同样疑惑的人。 下面是...
  • beyongwang
  • beyongwang
  • 2016年08月21日 21:14
  • 652

C++对象模型浅析

VTable 虚表 虚表的内存分布 一个简单的包含虚函数的类的声明 class A { public: virtual void v_a(){} virtual ~A...
  • whn_arthur
  • whn_arthur
  • 2016年02月23日 17:29
  • 401

C++ 对象模型详细讲解(特别容易理解)

c++对象模型系列 转    一、指针与引用 一 概括 指针和引用,在C++的软件开发中非常常见,如果能恰当的使用它们能够极大的提 高整个软件的效率,但是很多的C++学习者对它们...
  • sxh850297968
  • sxh850297968
  • 2014年11月16日 21:06
  • 2223
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++对象模型之函数成员(2)
举报原因:
原因补充:

(最多只允许输入30个字)