C++编程风格
作者 : Tom Cargill
译者 : 聂雪军
出版日期 : 2006-12-15
ISBN : 7-111-20363-1
定价 : 25.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 181
开本 : 16开
原书名 : C++ Programming Style
原出版社: Addison-Wesley
属性分类: 教材
包含CD :
绝版 :
图书简介

C++非常适于大规模编程,因此,对C++编程风格的讨论就超出了小规模编程所涉及的范围。本书对如何使用C++的大规模编程特性进行了详细的介绍,这些特性不易掌握,有时候甚至连经验丰富的程序员也难免出错。作者在书中还指出,如果我们没有正确地使用某种功能强大的语言特性,那么可能编写出糟糕的程序,这些程序甚至可能比那些使用简单方法编写的程序更加难以理解和低效。本书对多个示例程序进行了重新编写以改正程序中的问题,其中使用的技术包括:提高程序的一致性、去掉冗余的继承等。本书对程序的分析过程是模拟代码复查的方法,读者可以对同一问题的各种不同解决方法分别进行评价与判断,然后将这些分析与作者给出的分析加以比较。
  本书从示例程序中提炼出了一些关于设计风格与编码风格的规则。如果透彻理解了这些规则,并且在编程时能够遵循这些规则,那么将有助于程序员编写出更好的C++程序。本书用专门一章给出了一个案例研究。这个案例研究对一个简单的程序进行了反复地分析和修改,在每一次修改完之后,不仅程序的整体性能得到了提高,而且还减少了程序的代码量。本书最后总结了编程规则,帮助读者更好地掌握C++编程思想。

本书重点讲解以下主题:
  ·抽象   ·运算符的重载
  ·一致性      ·包装
  ·不必要的继承   ·效率
  ·虚函数          ·多重继承

图书特色

图书前言

Kernighan和Plauger的经典之作《The Elements of Programming Style》出版至今已经有大约二十年的时间,书中所给出的一组规则到现在仍然可以作为最好的编程指导思想。然而目前,程序正在变得日益庞大和复杂,同时我们所使用的编程语言也已经发生了很大的变化。现在,我们不仅需要关注程序中每个组件的算法和数据结构,还需要关注如何将程序中的所有组件更好地组合在一起。DeRemer和Kron提出了两个术语:“大规模编程”(programminginthelarge)和“小规模编程”(programminginthesmall),这两个术语分别用来描述程序的“大规模”特性和“小规模”特性。“小规模编程”主要研究程序中“代码只有几页长”的组件,例如一个C++类。而“大规模编程”则是研究如何将“小规模”的组件组合成一个完整的程序——用C++的术语来说,就是研究类之间的关系。在Kernighan和Plauger的书中,重点讲解了“小规模编程”,而对于“大规模编程”的讨论虽然很有道理,但篇幅有限,基本上可以概括为以下两点:
  1)将程序模块化。
  2)有效地使用子程序。
  本书所讲述的编程风格侧重于“大规模编程”,不过仅限于C++编程领域。本书所面向的读者,是那些已经学习过C++语言,并正在努力将语言的各种特性(尤其是面向对象的特性)应用于解决编程难题的程序员。虽然书中的讨论仅限于C++,但对于其他语言而言,其中的许多编程经验同样适用。我在书中已经尽可能地保持了语言的独立性,以便于读者进行阅读。
  我在本书中采用的是Kernighan和Plauger的讲解方法,即从对程序的关键的分析和改写中提炼出编程风格的规则。书中使用的所有程序都是从关于C++编程的教科书、期刊和手册中节选出来的,我并没有专门为本书编写示例程序。其中有些程序是原封不动地照搬过来,而有些程序则是进行了修改。这些修改包括改正一些无伤大雅的小错误,以及在保留程序结构的基础上,对那些没有获得版权的程序进行的修改。
  本书是本着“就事论事”的态度来分析代码的。我们都是通过阅读和分析彼此的代码来达到学习的目的。本书并不是要对某个程序员提出批评,只是试图找出好的程序与坏的程序之间的差别。毫无疑问,本书中的“好”程序也可能有着其自身的缺陷。我们鼓励读者对这些程序进行更严格的分析,并找出进一步改进编程风格的方法。
致谢
  本书是在C++ At Work和各种USENIX 会议所提供的资料基础上逐渐形成的。感谢SIGS的Rick Friedman以及USENIX的John Donnelly和Dan Klein,是他们为我提供了这些资料,同时也感谢编写这些资料的人们。特别感谢Solbourne公司的程序员们,他们为了给我提供第一份资料而殚精竭虑。本书还得益于《The C++ Journal》中的文章,因此我要感谢此期刊的编辑Livleen Singh。我与Dave Taenzer曾有过大量的讨论,这些讨论对于本书中的许多主题都有影响。同样还要感谢AddisonWesley出版社的John Wait对本书的信心和耐心。
  David Cheriton、James Coggins、Cay Horstmann、David Jordan、Brian Kernighan、Doug Lea、Scott Meyers、Rob Murray、Kathy Stark和Mike Vilot都审阅了本书的初稿,并提出了许多提高本书质量和消除错误的建议。我衷心地感谢他们的工作。
  感谢我挚爱的Carol Meier,在我编写本书的时候,她自始至终都支持着我。在本书的构思和写作期间,我们迎来了我们的第一个孩子。
  最后,我还要感谢以下的作者和出版机构,感谢他们允许我引用以下出版物中的资料:
  Davis,SR1991HandsOn Turbo C++Reading, MA:AddisonWesleyDewhurst, SC,和Stark,KT1989Programming in C++Englewood Cliffs,NJ:Prentice Hall
  C++ for C Programmers by Ira Pohl(Redwood City, CA:Benjamin/Cummings Publishing Company,1989)p92
  Stroustrup,B1991 The C++Programming Language,2d edReading,MA:AddisonWesley
  Wiener,RS,和Pinson,LJ1988An Introduction to ObjectOriented Programming and C++Reading,MA:AddisonWesley
  Wiener,RS,和Pinson,LJ1990,The C++WorkbookReading,MA:AddisonWesley
  Shapiro, JSA C++Toolkit。本书的部分内容来源于A C++Toolkit,Shapiro, JS,1991年版权所有。对这本书中部分内容的使用已经得到了许可。A C++Toolkit一书由Prentice Hall公司出版。
参考文献
  Kernighan和Plauger[2]的书籍对所有程序员来说都是值得推荐的。DeRemer和Kron[1]提出了“大规模编程”和“小规模编程”这两个术语。
  1.DeRemer,F,and Kron,H“Programminginthelarge versus Programminginthesamll”,Proceedings of the International Conference on Reliable Software,ACM/IEEE,April 1975,Los Angeles,California。
  2.Kernighan,BW,and Plauger,PJ1974(2d ed, 1978)The Elements of Programming Style New York, NY: McGrawHill。

Tom Cargill
波尔得,科罗拉多州

封底文字

C++非常适于大规模编程,因此,对C++编程风格的讨论就超出了小规模编程所涉及的范围。本书对如何使用C++的大规模编程特性进行了详细的介绍,这些特性不易掌握,有时候甚至连经验丰富的程序员也难免出错。作者在书中还指出,如果我们没有正确地使用某种功能强大的语言特性,那么可能编写出糟糕的程序,这些程序甚至可能比那些使用简单方法编写的程序更加难以理解和低效。本书对多个示例程序进行了重新编写以改正程序中的问题,其中使用的技术包括:提高程序的一致性、去掉冗余的继承等。本书对程序的分析过程是模拟代码复查的方法,读者可以对同一问题的各种不同解决方法分别进行评价与判断,然后将这些分析与作者给出的分析加以比较。 本书从示例程序中提炼出了一些关于设计风格与编码风格的规则。如果透彻理解了这些规则,并且在编程时能够遵循这些规则,那么将有助于程序员编写出更好的C++程序。本书用专门一章给出了一个案例研究。这个案例研究对一个简单的程序进行了反复地分析和修改,在每一次修改完之后,不仅程序的整体性能得到了提高,而且还减少了程序的代码量。本书最后总结了编程规则,帮助读者更好地掌握C++编程思想。 本书重点讲解以下主题: ·抽象 ·运算符的重载 ·一致性 ·包装 ·不必要的继承 ·效率 ·虚函数 ·多重继承

作者简介

Tom Cargill:Tom Cargill: 是C++领域中公认的专家。在AT&T贝尔实验室的时候,他就是最早使用C++的程序员之一。他还是《The C++ Journal》和《The C++ Report》的专栏作家。本书的内容最初来源于Cargill在众多技术会议中所使用的材料。

译者简介

聂雪军:2002年起从事软件开发工作,主要开发语言为C++,具有较丰富的Windows和Linux开发经验。译作有《C++编程风格》、《Exceptional C++中文版》等。

译者序

这是一本能够提升你的C++编程功力的书籍。
  C++是一种功能强大的编程语言,这已是不争的事实。目前,许多关于C++的书籍都只是对语言本身进行了详细的介绍,而对于如何正确地使用C++语言却介绍得不多。这就好比我们拥有了一种强大的武器,却无法有效地发挥它的最大威力。例如,虚函数和动态绑定是C++的强大功能之一,但我们必须首先识别出正确的抽象,才能有效地使用虚函数;否则,盲目地使用虚函数反而会降低程序的性能。与其他的C++语言书籍相比,本书更像是一本通过C++来阐述软件工程思想和设计模式的书籍。书中所讲述的大多数问题都是与大规模编程相关的,重点是放在程序中不同组件之间的交互行为上,而不是诸如命名规则、注释风格等细节问题上。对程序员来说,实现某个功能并不是件难事,困难的是如何使设计和编码更为合理,这其中包括:代码的可读性、可维护性、可扩展性以及执行效率等。通过对本书的学习,你将会掌握正确的设计思想和使用C++的方法。
  本书的最大特点就是理论与实际紧密相连。书中的示例代码都是从实际程序中抽取出来的。译者在翻译本书的时候,总有一种似曾相识的感觉:书中所提到的许多错误,在译者还是新手的时候都曾遇到过,因此能够与作者的分析和讲解产生共鸣。在任何一名新手的成长过程中,总是要经过痛苦的实践和许多不眠之夜,才能够积累一些经验和教训。而在本书中,作者将这些最宝贵的东西一并呈现给了读者。
  本书的另一特点就是它的平实性。书中既没有华丽的辞藻,也没有尖锐的观点,而只是通过普通的叙述方法,将我们在编码过程中所遇到的问题加以剖析。细细读来,就好像是经验丰富的大师正在给新手们讲解如何正确地编写代码以及避开一些常见的误区和陷阱。
  书中所给出的编程规则对于程序员设计和编码是很有帮助的。但是切记,任何规则都不是绝对的,在每一条规则后面都有着特定的使用条件。即使是同一条规则,在不同的环境中,所起的作用可能是截然不同的。我们应该灵活地使用这些规则,而不是生搬硬套。否则,规则将会变成教条,这就违背了作者的初衷。
  译者深知“一份耕耘,一份收获”,因此在翻译过程中不敢有一丝懈怠。对每个不易理解的地方,译者总是仔细斟酌,反复推敲,尽最大努力去将那些精妙的思想用浅显的语言表达出来。然而,由于时间和水平有限,翻译中的疏漏之处在所难免,还望读者和同行不吝指正。
  致谢
  本书的完成首先要感谢好友王昕,是他促成了我与机械工业出版社的这次合作。参加本书翻译的还有李杨、吴汉平、徐光景、童胜汉、陈军、胡凯、李斌、张玮、陈红、刘红等。感谢华章分社陈冀康编辑对于我的信任和耐心,使我能够顺利地完成本书。感谢出版社其他编辑对本书的审阅和校对,感谢你们的细心。感谢妻子云兰和我们即将出世的孩子,感谢你们,你们是我永远的动力。感谢我的父母,你们一直都在默默地支持着我。

聂雪军
2006年5月于北京

图书目录

第0章 概述
参考文献
第1章 抽象
11 编程风格示例:计算机的定价
12 找出共同的抽象
13 类之间的区别
14 属性与行为
15 再次引入继承
15 去掉枚举
小结
参考文献
练习
第2章 一致性
21 编程风格示例:string类
22 明确定义的状态
23 物理状态的一致性
24 类不变性
25 动态内存的一致性
26 动态内存的回收
27 编程风格示例:第二种方法
小结
参考文献
练习
第3章 不必要的继承
31 编程风格示例:堆栈
32 继承作用域准则
33 继承关系
34 封装
35 接口与实现
36 模板
小结
参考文献
练习
第4章 虚函数
41 编程风格示例:车辆与车库
42 一致性
43 基类的析构函数
44 继承
45 耦合
小结
参考文献
练习
第5章 运算符的重载
51 运算符重载的基本概念
52 编程风格示例:FileArray类
53 对实现的继承
54 程序设计中的权衡:重载运算符和成员函数
小结
参考文献
练习
第6章 包装
61 一个用C编写的库
62 编程风格示例:用C++对dirent进行包装
63 多个Directory对象
64 构造函数中的失败
65 对失败状态的公有访问
66 错误信息参数
小结
参考文献
练习
第7章 效率
71 编程风格示例:BigInt类
72 BigInt的使用
73 动态字符串的长度
74 动态字符串的数量
75 客户代码
76 改写BigInt
小结
参考文献
练习
第8章 案例研究
81 编程风格示例:有限状态机
82 初始化
83 耦合
84 内聚
85 模块类与抽象数据类型
86 属性与行为
87 泛化
参考文献
练习
第9章 多重继承
91 多重继承中的二义性
92 有向无环继承图
93 分析虚基类
94 编程风格示例:Monitor类
95 编程风格示例:虚基类
96 多重协议继承
小结
参考文献
练习
第10章 规则总结
第1章:抽象
第2章:一致性
第3章:不必要的继承
第4章:虚函数
第5章:运算符的重载
第6章:包装
第7章:效率
第8章:案例研究
第9章:多重继承

教学资源推荐
作者: (美)Eric S.Roberts
作者: 郑阿奇 主编 丁有和 编著
作者: [美] 本贾尼?斯特劳斯特鲁普 (Bjarne Stroustrup)著
作者: Al Kelley, Ira Pohl
参考读物推荐
作者: (瑞典)Rickard Oberg
作者: (美)Christopher Moyer 著
作者: (美)Eric Rochester 著
作者: 陈晓勇 著