深度摸索C++对象模子(2)[VC/C++编程]
本文“深度摸索C++对象模子(2)[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
史列因:我刚看了你写的“深度摸索C++对象模子(1)”,感受很不错.不过我有一个倡议:你说“谁知第一章便如此的难以消化,已经反复读了3遍,还是有些夹生”是很自然的.第一章是一个总览,假如你能全看懂,背面的就没什么看的必要了.第一章的内容背面都有具体介绍,开始只要有个大约印象便可以了.这本书中很多内容都是前后反复的.我倡议你先不管看懂看不懂,只管向后看,之后再重新看几遍,那样效果好得多.
我想史列因说的应当是一种非常好的阅读方法,近似《深度摸索C++对象模子》这样的技术书籍,需求的是理解,和学习英文差别,不能靠死记硬背,假如呈现理解不了的情形,那你无妨将书放下,打一盘红警(俺自大的说,我是高手).大概跳过去也是一个不错的办法.好了,我们还是持续研究C++的对象模子吧.
简单的对象模子
看书上的例子(注释是表示solt的索引)
Class Point
{
public:
Point(float xval); //1
virtual ~Point(); //2
float x() const; //3
static int PointCount(); //4
protected:
virtual ostream& print(ostream &os) const; //5
float _x; //6
static int _point_count; //7
}
每一个Object是一系列的Slots,每一个Slots指向一个members.
表格驱动对象模子
当构造对象时便会有一个近似指针数组的东西存放着类数据成员在内存中位置的指针,还有指向成员函数的指针.为了对一个类产生的全部对象实体有一个尺度的表达,所以对象模子采取了表格,把全部的数据成员放在数据成员表中,把全部的成员函数的地址放在了成员函数表中,而类对象本身有指向这两个表的指针.
为了便于理解,雷神来举个不得当的例子阐明一下,注意是不很得当的例子 我们把写字楼当作一个类,写字楼中的人当作是类的数据成员,而每一个租用写字楼的公司当作类的成员函数.我们来看一个实体,我们叫它雷神大厦.雷神大厦的物业管理部门需求登记每个出入写字楼的人,以便发通行证,并且需求登记每个公司的房间号,并制作了一个牌子在大厅的墙上.实际上这就是类的对象构造历程.你可以通过大厅墙上的公司列表找到任何一家在雷神大厦租房的公司,也可以通过物业供应的花名册找到任何一个出入雷神大厦的人.
真是一个磨练大家想象力的例子.(假如你有更好例子的别忘了和雷神交流一下).
C++的对象模子
C++对象模子是从简单对象模子派生得来,并对内存空间和存取时间做了优化.它引入了虚函数表(virtual table)的筹划.每个类产生一堆指向虚函数的指针,放在表格中.每个类的对象被增添了一个指针(vptr),指向相关的虚函数表(virtual table).而这个指针是由每一个类的constructor、destructor和copy assignment运算符自动完成.
我们还用上面的雷神大厦举例,物业管理为了提高效率,对长期安定的公司和人员不再登记,指对不安定或不能肯定的公司举行登记,以便于管理.
再次磨练大家的想象力.
得出结论,C++对象模子和双表格对象模子相比,提高了空间和存储时间的效率,却失去了弹性.
试想一下,没有整个雷神大厦人员和公司的名录,假如他们发生改变,则需求物业管理部门做很多工作.重新肯定长期安定的公司和人员是那些.对应利用程序则需求重新编译.(这次更离谱,但为了保持联贯,大家请举行理解性的考虑,不要范围字面的意思)
这篇笔记是分成多次一点点写的,乃至每天抽出一个小时都不能保证(没办法近来实在忙),因此大概会有不联贯,假如你读起来很不爽认为雷神的思维短路了,那属于正常.不过雷神还是再上传之前勤奋的将思绪举行了一下整理.但愿能把这些支言片语串起来.
最后说一句阅读《深化C++对象模子》一书感受没有什么可以被成为重点的东西,感受每一个字都不该该放过,满是重点.经太反复阅读,雷神好象有些开窍,持续勤奋呀,我和大家都是.
以上是“深度摸索C++对象模子(2)[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |