程序员编程艺术(c/c++卷):第八章、从头至尾漫谈虚函数(二)

2014-11-24 12:59:12 · 作者: · 浏览: 4
z() const { return _z; }

// ... other operations ...
protected:
float _z;
};

3、在Point3d的对象pt3d中,则有四个东西,一个是_x,一个是_vptr_Point,一个是_y,一个是_z。其中_vptr_Point指向着virtual table point3d。由于point3d继承自point2d,所以在virtual table point3d中存储着:已经改写了的point3d的~Point3d(),point3d::mult()的函数地址,和z()函数的地址,以及未被改写的point2d的y()函数地址。

ok,上述1、2、3所有情况的详情,请参考下图。

\

(图:virtual table(虚表)的布局:单一继承情况)

本文,日后可能会酌情考虑增补有关内容。ok,更多,可参考深度探索c++对象模型一书第四章。
最近几章难度都比较小,是考虑到狂想曲有深有浅的原则,后续章节会逐步恢复到相应难度。

第四节、虚函数的布局与汇编层面的考察

ivan、老梦的两篇文章继续