第3版前言
自本教材的第2版出版以来,根据我们的教学实践以及广大读者的反馈意见,我们发现教材还存在一些不尽如人意的地方,现予以修订。
第3版的变动主要体现在以下几个方面:
1.重新组织和调整了一些章节的内容,使得教材内容安排更加合理,并进一步突出教材对主流程序设计思想、概念和技术的介绍。例如:把整数的补码表示以及实数的浮点表示集中放入1.1.3节“机内信息表示”中介绍;把基于断言的程序调试从第4章“过程抽象—函数”移至第10章“异常处理”中介绍;在第5章“复合数据的描述—构造数据类型”的子标题中显式指出每种类型的作用;把“操作符重载”从单独的一章(第2版的第7章)变成一节(6.6.5节)放入6.6节的“对象与类的进一步讨论”中;把C++的编译预处理命令(包括条件编译)、常用标准函数和STL算法以及MFC常用类的介绍放到附录中;围绕“消息驱动”和“文档-视”软件结构重新组织了第11章对基于MFC的面向对象程序设计的介绍;等等。
2.针对C++新的国际标准(C++11),增加一些对程序设计有良好支持的内容。例如:增加了对λ表达式的介绍,包括λ表达式的定义(4.6.4节“匿名函数—λ表达式”)、实现(6.6.5节中的“函数调用操作符重载”)以及应用(5.5.6节“函数指针”和8.3节“C++标准模板库”),通过λ表达式可以实现匿名函数,它把函数定义和使用合二为一,以提高程序中“临时用一下”的小函数的灵活性;增加了对转移构造函数(6.6.4节“对象拷贝构造过程的优化—转移构造函数”)和转移赋值操作符重载函数(6.6.5节)的介绍,它们基于“右值引用”参数类型实现把资源从即将消亡的对象转移(而不是复制)到新创建的或已有的对象中,从而提高程序效率;等等。
3.针对初学者,尤其是自学者,对一些内容的描述进行了完善,并对全书的语言文字和逻辑进行了优化,使得教材更加便于阅读;对教材例子中的程序代码增加了注释,使得它们更加容易理解。另外,尽量减少了在前面出现而在后面才会详细介绍的概念,以避免给初学者带来困扰。对于必须提前出现的概念以“将在……节……中介绍”的引用形式给出,而在后面用到前面介绍的内容时,将采用“参见……节的……”的引用形式。
4.补充了一些习题,使得读者能更好地理解和掌握核心内容,并有针对性地进行程序设计训练。
5.修正了第2版中的一些错误。
本教材修订过程中得到了很多人的帮助,在第3版出版之际向他们表示感谢。特别感谢刘奇志老师和黄书剑老师,他们在与作者一起承担程序设计课程的教学过程中发现了本教材的一些问题,并对本教材的修订提出了很多很好的建议,作者获益良多。另外,还要感谢策划编辑朱劼对我们的鼓励与鞭策,并为教材编写出谋划策。
作者于南京大学
2015年2月