深度探索C++对象模型(1)

深度探索C++对象模型(1),第1张

深度探索C++对象模型(1),第2张

第一章:关于实物课
看完这一章,我想起很久以前看到的一个笑话。写一个HELLO WORLD程序,程序代码会随着级别和职位的变化而变化。当初完全被当成笑话,现在看来写这个笑话的人水平不一般。如果你想让你的代码能够适应不同的运行环境,并在有限的范围内重用,那么在设计和编写的过程中就有很多问题需要考虑,所以用C语言代码不再简洁高效。为了更好的包装,牺牲了这些优点。当然,如果只是想打印Hello World,也可以不这么做。

用C++思考解决问题,对于已经熟悉C语言的人来说会比较困难。需要一段时间习惯,否则代码会似是而非。更何况,学不会邯郸学步,思想上还得彻底C++(OO)。如果只是照葫芦画瓢,结果很可能是用C++语法写出C风格的程序。我犯过的一个典型的低级错误就是无意识地无限扩展一个类,完全没有考虑到类(基类派生类)的多层结构,在需要的时候给类添加属性或者方法。虽然也使用了多态、重载等一些OO设计方法,但最终这个类是庞大的,除了目前系统中的辛苦之外,没有复用的可能。如果另一个系统需要类似的东西,更要命的是维护更新带来的麻烦,需要不断的编译。而且,在使用了大量注释之后,代码过一段时间阅读起来也是一种沉重的脑力劳动。并且失去了C的简洁、清晰和高效,没有完全具备C++的面向对象特性。这根本不能称之为C++程序。(我觉得有时间重写之前的代码会有很多收获。复习旧的能学到新的东西吗?)C和C++在编程思想上互相矛盾。也就是说,想学C++,根本不用学C。你只需要一本好书和一个不太笨的大脑加上努力工作。如果你已经有了C经验,在某些情况下你会制造麻烦。

本章是对象模型的概述。既然我们选择了C++而不是C作为开发工具,那么我们的编程思路就应该改为C++,而不是延续C的过程化方式,我们必须学习C++的思维方式。用抽象的数据类型或者一个多层的类体系来封装数据和数据处理功能,只有摆脱C程序中使用全局数据的惯性,才能充分发挥C++对象模型的强大威力。

在C++中,有两个数据成员静态和非静态,三个成员函数静态、非静态和虚拟。C++对象模型优化了内存空和访问时间。非静态数据成员放在类对象内部,而静态数据成员放在类对象外部。静态和非静态成员函数放在类对象之外。虚函数由指向vtbl(虚函数表)的类对象的指针vptr支持。vptr的设置和重置由类的构造函数、析构函数和复制赋值操作符自动完成。

几乎我们设计的每个类都有一个或多个构造函数、析构函数和赋值操作符。它们的功能是构造一个新的对象并确保它被初始化。析构函数销毁一个对象,并确定它已经被正确清理(以避免内存泄漏的问题),赋值操作符给对象一个新值。

这是第一章的第一部分。由于雷神最近几天在做格局组的主页,时间转不过来。本来想写一整章再发的,还是先考虑发一部分吧。原因有二。1.第一章的后半部分可能会再拖十天半月。2.笔记真的很难写。我不想照搬书上的重点,但我喜欢尽可能地描述我的理解。谁知道第一章这么难消化。我看了三遍,还是有点混乱。所以本着对所有人和自己负责的态度,雷神准备再看三遍。突然发现我的C++还远远落后,好可怕。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 深度探索C++对象模型(1)

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情