C++代码设计与重用
基本信息
- 原书名: Designing and Coding Reusable C++
- 原出版社: Addison Wesley
推荐阅读
内容简介回到顶部↑
本书全面展示如何使用C++编写可重用的代码,从而提高程序员的开发效率。
全书分为12章。包括重用性基本概念、类设计、扩展性、效率、错误、冲突、兼容性。继承、移植性、程序库等和重用相关的诸多话题。每一章的最后,通过总结和练习帮助你巩固概念、加深理解,参考文献和相关资料为你指明了深入学习的方向。
本书适合有一定C++经验的程序员阅读,也可供以提高代码重用性为专门学习方向的读者参考。
全书分为12章。包括重用性基本概念、类设计、扩展性、效率、错误、冲突、兼容性。继承、移植性、程序库等和重用相关的诸多话题。每一章的最后,通过总结和练习帮助你巩固概念、加深理解,参考文献和相关资料为你指明了深入学习的方向。
本书适合有一定C++经验的程序员阅读,也可供以提高代码重用性为专门学习方向的读者参考。
作译者回到顶部↑
本书提供作译者介绍
Martin Carroll是AT&T贝尔实验室的技术人员,他曾经用好几年的时间致力于设计和实现可重用的C++程序库,包括AT&T标准组件库(Standard Components Library)。他在Rutgers大学获得计算机科学博士学位。
Margaret Ellis是The Annotated C++ Reference Manual的合著者(另一个作者是大名鼎鼎的C++之父Bjarne Stroustrup),她主要致力于AT&T贝尔实验室、UNIX系统实验室和美国Novell公司的编译器开发。她曾获得加州大学计算机专业的硕士学位。
.. << 查看详细
Margaret Ellis是The Annotated C++ Reference Manual的合著者(另一个作者是大名鼎鼎的C++之父Bjarne Stroustrup),她主要致力于AT&T贝尔实验室、UNIX系统实验室和美国Novell公司的编译器开发。她曾获得加州大学计算机专业的硕士学位。
.. << 查看详细
目录回到顶部↑
第1章 重用性介绍
1.l 什么是重用性
1.1.1 提取代码来作为重用
1.1.2 可重用代码的基本特性
1.2 重用的神话
1.3 重用的障碍
1.3.l 非技术障碍
1.3.2 技术障碍
1.4 希望是否尚存
1.5 这本书能给我们带来什么
1.6 练习
1.7 参考文献和相关资料
第2章 类的设计
2.l 抽象性
2.2 正规函数
2.3 nice类
2.4 存在最小标准接口吗
2.4.1 缺省构造函数
2.4.2 赋值运算符
2.4.3 拷贝构造函数
1.l 什么是重用性
1.1.1 提取代码来作为重用
1.1.2 可重用代码的基本特性
1.2 重用的神话
1.3 重用的障碍
1.3.l 非技术障碍
1.3.2 技术障碍
1.4 希望是否尚存
1.5 这本书能给我们带来什么
1.6 练习
1.7 参考文献和相关资料
第2章 类的设计
2.l 抽象性
2.2 正规函数
2.3 nice类
2.4 存在最小标准接口吗
2.4.1 缺省构造函数
2.4.2 赋值运算符
2.4.3 拷贝构造函数
前言回到顶部↑
一切事物都将得到检验并因此被称问题。
——Edith Hamilton
这本书的主要目的在于:展示如何以C++编程语言编写可重用代码——就是说,根据不同的需要,在不经过修改,或者经过很少修改的前提下,可重用代码可以很容易地应用到5个、50个甚至500个程序当中,而且这些程序往往是不同程序员编写的,可能运行在不同的系统上。在整个阐述的过程中,我们的目的并不在于争论是否所有的代码都是可重用的,也不在于说明可重用代码能够解决所有的程序问题。显然,不论是对程序员而言,还是对可重用代码本身而言,提高代码的重用性都是需要代价的;通常只有当我们有理由相信所给代码在将来有可能会被重用时,我们才会付出这些重用的代价。因此,本书的目的在于详细分析重用性的这些代价,于是当你面对是否编写可重用代码的选择时,可以从容地做出明智的决定。
关于本书
本书主要面向的读者是:那些希望从书中包含的许多深层C++编程见解中受益的读者,或者是那些需要或希望学习如何编写可重用代码的读者;在论述过程中,我们假设读者已经知道如何编写正确的C++代码。
C++语言至今还没有经过标准化(译注:本书写作于1995年,C++于1997年标准化),任意两个不同的编译器实现支持的语言几乎都是不同(稍微不同或者相差很大)的。当我编写这本书的时候,并没有一个编译器实现可以完全支持 ANSI/ISO C++标准中最终定义的整个语言特性;而且,就算对同类型的编译器而言,前后版本实现的语言特性也不尽相同。于是,编写一本对所有编译器都适用的书是很困难的,或者是不可能的。因此,当我们讨论或使用一些不能被主流C++编译器所实现的特性时,我们将会另加说明。
当声明本书中的代码例子被认为合法时,我们所指的合法性是以1994年9月份ANSI/ISOC++的工作文件(有时候也称为“标准草案”)[ANS94]为依据的。而且,在我们的代码例子里,我们将尽量避免使用那些我们认为在最终 ANSI/ISO C++标准公布之前,很有可能会被删除或者进行重大修改的语言特性。
要跟踪C++语言的演化,有几个资源是可以利用的。Internet讨论组comp.lang.c和comp.std.c++主要致力于C++的讨论。互联网中还有一个关于C++的主页:
http://info.desy.de/user/projects/C++.html而由纽约SIGS出版社定期发行的C++ Roport,也经常会刊登许多C++程序员感兴趣的文章。至于学习C++的书籍,Lippman的[Lip9l]和Stroustrup的[Sedl]是最佳的学习教材。
任何关于重用性的完整讨论都会涉及到软件开发的一些其他主题,如接口的设计、实现的效率、可移植性、冲突等等。在书中的论述中,我们假设读者对软件开发已经有所了解;因此,我们只注重于那些应用于可重用代码的主题,而不是那些应用于一般软件开发的主题。
“每本教材都会撒谎”,这是我们老师非常喜欢的一句谚语。在这里,她实际要表达的意思是:每本教材为了教学的简化性和明确性,都必须简化书中的内容,从而都会歪曲所要表达的信息。显然,即使在需要简化的前提下,我们还是应该用抓住众多细节间的本质信息的方法来表述每个主题,这本书也不例外。于是,对于某些主题,即使有些读者己经对这个主题的方方面面都有所了解,我们还是希望他们能够和我们一起共同探讨该主题的内容。而且,对于一些主题内容的省略,我们也希望能够得到这些读者的谅解。
选择与建议
设计和编写可重用代码将会涉及到许多选择(即在多种实现方案中选定某种方案),而某些选择的决定又是左右为难的。通常,对于这些选择,并没有完全确定或者正确的答案——无论你做出哪个选择,每个选择都是有代价的。我们将讨论各种不同选择方案的优点和缺点,从而让将来可重用代码的编写者可以从容地做出明智的决定。
有时,对于某个给定的决定,我们会认为某种风格或者方法要优于其他所有的风格或者方法。于是,当遇到这种情况时,我们会明确地建议采用这种风格或者方法,并给出支持这种风格或者方法的详细理由。然而,在大多数情况下,只有C++程序库的设计者,才能决定哪种方法对程序库用户而言是最好的。
这本书的一个目的在于:详细并且清楚地给出编写可重用代码的大多数重要选择。如果我们忽略了某些重要的选择,那么我们愿闻其详。
书中大多数关于选择的讨论都会提到效率。虽然我们并不认为效率是所有可重用C++代码最重要的设计目标,因为对于许多程序库设计而言,譬如扩展性、灵活性等其他特性将会比效率更加重要:但我们在文章中又处处提到效率,这是因为效率将会和可重用C++代码的其他每个可取的特性都相互制约。既然对效率已经花费了这么多笔墨,我们也希望可以给出所有和效率相互制约的因素。
代码例子
我们希望这本书的价值在于:与刚开始读这本书之前相比,当你读完这本书的时候,你将知道更多关于如何编写可重用代码的知识。因此,我们使用了大量的例子,而且许多例子的代码是来自于现实中已经存在的代码,因为,那些不是取材于真实代码的例子,不足以阐明实际编程中会出现的问题,也不足以说明实际编程中使用的各种技术。在这里,我们只是为了阐明重用性的目的而利用这些代码。
为了节省篇幅,成员函数的主体通常都是在类的声明中给出;即使在重用性的代码设计中,这些函数也不会被实现为内联函数。例如,读者不应该从下面的类定义语句中得出:函数f是内联函数(就是说实际上f不是内联函数)的结论。
class Z{
——Edith Hamilton
这本书的主要目的在于:展示如何以C++编程语言编写可重用代码——就是说,根据不同的需要,在不经过修改,或者经过很少修改的前提下,可重用代码可以很容易地应用到5个、50个甚至500个程序当中,而且这些程序往往是不同程序员编写的,可能运行在不同的系统上。在整个阐述的过程中,我们的目的并不在于争论是否所有的代码都是可重用的,也不在于说明可重用代码能够解决所有的程序问题。显然,不论是对程序员而言,还是对可重用代码本身而言,提高代码的重用性都是需要代价的;通常只有当我们有理由相信所给代码在将来有可能会被重用时,我们才会付出这些重用的代价。因此,本书的目的在于详细分析重用性的这些代价,于是当你面对是否编写可重用代码的选择时,可以从容地做出明智的决定。
关于本书
本书主要面向的读者是:那些希望从书中包含的许多深层C++编程见解中受益的读者,或者是那些需要或希望学习如何编写可重用代码的读者;在论述过程中,我们假设读者已经知道如何编写正确的C++代码。
C++语言至今还没有经过标准化(译注:本书写作于1995年,C++于1997年标准化),任意两个不同的编译器实现支持的语言几乎都是不同(稍微不同或者相差很大)的。当我编写这本书的时候,并没有一个编译器实现可以完全支持 ANSI/ISO C++标准中最终定义的整个语言特性;而且,就算对同类型的编译器而言,前后版本实现的语言特性也不尽相同。于是,编写一本对所有编译器都适用的书是很困难的,或者是不可能的。因此,当我们讨论或使用一些不能被主流C++编译器所实现的特性时,我们将会另加说明。
当声明本书中的代码例子被认为合法时,我们所指的合法性是以1994年9月份ANSI/ISOC++的工作文件(有时候也称为“标准草案”)[ANS94]为依据的。而且,在我们的代码例子里,我们将尽量避免使用那些我们认为在最终 ANSI/ISO C++标准公布之前,很有可能会被删除或者进行重大修改的语言特性。
要跟踪C++语言的演化,有几个资源是可以利用的。Internet讨论组comp.lang.c和comp.std.c++主要致力于C++的讨论。互联网中还有一个关于C++的主页:
http://info.desy.de/user/projects/C++.html而由纽约SIGS出版社定期发行的C++ Roport,也经常会刊登许多C++程序员感兴趣的文章。至于学习C++的书籍,Lippman的[Lip9l]和Stroustrup的[Sedl]是最佳的学习教材。
任何关于重用性的完整讨论都会涉及到软件开发的一些其他主题,如接口的设计、实现的效率、可移植性、冲突等等。在书中的论述中,我们假设读者对软件开发已经有所了解;因此,我们只注重于那些应用于可重用代码的主题,而不是那些应用于一般软件开发的主题。
“每本教材都会撒谎”,这是我们老师非常喜欢的一句谚语。在这里,她实际要表达的意思是:每本教材为了教学的简化性和明确性,都必须简化书中的内容,从而都会歪曲所要表达的信息。显然,即使在需要简化的前提下,我们还是应该用抓住众多细节间的本质信息的方法来表述每个主题,这本书也不例外。于是,对于某些主题,即使有些读者己经对这个主题的方方面面都有所了解,我们还是希望他们能够和我们一起共同探讨该主题的内容。而且,对于一些主题内容的省略,我们也希望能够得到这些读者的谅解。
选择与建议
设计和编写可重用代码将会涉及到许多选择(即在多种实现方案中选定某种方案),而某些选择的决定又是左右为难的。通常,对于这些选择,并没有完全确定或者正确的答案——无论你做出哪个选择,每个选择都是有代价的。我们将讨论各种不同选择方案的优点和缺点,从而让将来可重用代码的编写者可以从容地做出明智的决定。
有时,对于某个给定的决定,我们会认为某种风格或者方法要优于其他所有的风格或者方法。于是,当遇到这种情况时,我们会明确地建议采用这种风格或者方法,并给出支持这种风格或者方法的详细理由。然而,在大多数情况下,只有C++程序库的设计者,才能决定哪种方法对程序库用户而言是最好的。
这本书的一个目的在于:详细并且清楚地给出编写可重用代码的大多数重要选择。如果我们忽略了某些重要的选择,那么我们愿闻其详。
书中大多数关于选择的讨论都会提到效率。虽然我们并不认为效率是所有可重用C++代码最重要的设计目标,因为对于许多程序库设计而言,譬如扩展性、灵活性等其他特性将会比效率更加重要:但我们在文章中又处处提到效率,这是因为效率将会和可重用C++代码的其他每个可取的特性都相互制约。既然对效率已经花费了这么多笔墨,我们也希望可以给出所有和效率相互制约的因素。
代码例子
我们希望这本书的价值在于:与刚开始读这本书之前相比,当你读完这本书的时候,你将知道更多关于如何编写可重用代码的知识。因此,我们使用了大量的例子,而且许多例子的代码是来自于现实中已经存在的代码,因为,那些不是取材于真实代码的例子,不足以阐明实际编程中会出现的问题,也不足以说明实际编程中使用的各种技术。在这里,我们只是为了阐明重用性的目的而利用这些代码。
为了节省篇幅,成员函数的主体通常都是在类的声明中给出;即使在重用性的代码设计中,这些函数也不会被实现为内联函数。例如,读者不应该从下面的类定义语句中得出:函数f是内联函数(就是说实际上f不是内联函数)的结论。
class Z{
序言回到顶部↑
最早知道这本书,是在 Scott Meyers著名的More Effctive C++书籍推荐列表里。在谈到这本书的时候,Meyers说:“有意撰写程序库的人,若没有读过此书,那只能是匹夫之勇。”而Francis Glassborow则说,大多数程序库设计者应该搬过小板凳来,像小学生那样学习这本书。
用C++的人,历来以能撰写出重用性好的程序库而引以为做。然而,撰写可用的程序库已属不易,撰写可重用的程序库更是专家级任务,以至于有人感叹道,重用是C++程序员们的“圣杯”——总在嚷嚷着,却始终得不到。其实何止C++如此,在其他语言中,重用又何尝不是令人胆怯的挑战!只不过C++编译语言的本质与人们对C++程序性能的严苛要求,使得用C++编写可重用组件更为困难。这样一个艰难的主题,敢于涉足已经是非常有勇气了,而能得到Meyers等人如此高的评价,则非C++中的顶尖人物倾力而为不可。事实上,作者Martin Carroll和Margaret Ellis正是这样的顶尖人物。他们是AT&T实验室的研究人员,从20世纪80年代中期开始就处于C++演化和发展的中心,长期从事编译器和基础库的开发工作,积累了普通程序员无法比拟的经验。特别值得一提的是, Mnyare Ellis曾与Bjarne Stroustrup合作撰写了C++早期的经典著作ARM(The Annotated C++ Reference Manual),是C++社群里最受尊敬的巾帼英雄之一。在这本书中,两位作者把自己多年来撰写可重用库的经验和教训高浓度地总结起来,给出了很多具有深刻洞察力的建议。虽然从此书英文版出版至今已有几年的时间,但是书中的真知灼见仍然值得我们一再学习体会。我甚至认为,即使你不打算撰写程序库,甚至不是C++程序员,认真阅读这本书都是很有好处的。毕竟这本书来自具有丰富实战经验的顶尖专家之手,而这样的书是在是太少了。
译者陈伟柱是我的好朋友,在C++、Java、模式和重用等方面都有比较深刻的理解。他对待此书翻译工作的态度极为认真,正是这一点令我对这本书的翻译质量很有信心。原书作者是以技术扎实而谦恭简和著称的,他们的文字也是平实简练而深富内涵的,我认为伟柱的为人和他的文字也具有这样的特点。因此,我衷心希望读者也能以平实谦和的心态认真、扎实地阅读和学习此书,并祝愿大家能有满意的收获。
孟岩
2002年10月于北京
用C++的人,历来以能撰写出重用性好的程序库而引以为做。然而,撰写可用的程序库已属不易,撰写可重用的程序库更是专家级任务,以至于有人感叹道,重用是C++程序员们的“圣杯”——总在嚷嚷着,却始终得不到。其实何止C++如此,在其他语言中,重用又何尝不是令人胆怯的挑战!只不过C++编译语言的本质与人们对C++程序性能的严苛要求,使得用C++编写可重用组件更为困难。这样一个艰难的主题,敢于涉足已经是非常有勇气了,而能得到Meyers等人如此高的评价,则非C++中的顶尖人物倾力而为不可。事实上,作者Martin Carroll和Margaret Ellis正是这样的顶尖人物。他们是AT&T实验室的研究人员,从20世纪80年代中期开始就处于C++演化和发展的中心,长期从事编译器和基础库的开发工作,积累了普通程序员无法比拟的经验。特别值得一提的是, Mnyare Ellis曾与Bjarne Stroustrup合作撰写了C++早期的经典著作ARM(The Annotated C++ Reference Manual),是C++社群里最受尊敬的巾帼英雄之一。在这本书中,两位作者把自己多年来撰写可重用库的经验和教训高浓度地总结起来,给出了很多具有深刻洞察力的建议。虽然从此书英文版出版至今已有几年的时间,但是书中的真知灼见仍然值得我们一再学习体会。我甚至认为,即使你不打算撰写程序库,甚至不是C++程序员,认真阅读这本书都是很有好处的。毕竟这本书来自具有丰富实战经验的顶尖专家之手,而这样的书是在是太少了。
译者陈伟柱是我的好朋友,在C++、Java、模式和重用等方面都有比较深刻的理解。他对待此书翻译工作的态度极为认真,正是这一点令我对这本书的翻译质量很有信心。原书作者是以技术扎实而谦恭简和著称的,他们的文字也是平实简练而深富内涵的,我认为伟柱的为人和他的文字也具有这样的特点。因此,我衷心希望读者也能以平实谦和的心态认真、扎实地阅读和学习此书,并祝愿大家能有满意的收获。
孟岩
2002年10月于北京
相关资源回到顶部↑
· 【推荐】众多高校学子口口相传,他们共同的选择--华清远见嵌入式学院(嵌入式Linux就业课程、3G手机开发就业课程,通过入学测试即签100%就业协议,4个月集中实训,世界500强企业成功就业保障!!!)· 【亚嵌教育 嵌入式培训专家】(嵌入式培训,嵌入式Linux培训,ARM培训,Linux培训,3G培训,Android培训,WINCE培训,DSP培训,FPGA培训,嵌入式就业培训)
· 程序员的7种武器(正则表达式、编程语言、数据库、算法、软件调试、开发环境)
· C/C++ 经典著作(《C专家编程》《C++ Templates中文版》《C和指针 》《C陷阱与缺陷》《C++沉思录》)
评论交流
共有12人开贴评论 20人参与评论 11人参与打分 查看
评价等级:







发表于:2003-4-2 23:23:00
这本书的风格,正如译者所说的,算是“平实无华”的一类。
书是好书,是属于那种比较有“大局观”的,能够在设计思想上给人启发的书。但是现时之世,热衷于遍寻奇技淫巧者多,所以这本书的染尘也是意料中事。就算是如今名声赫赫的《设计模式》,众多追风者中,又有几个认真拜读过?
初读时略感生晦,后来并不循章而进,随心翻至,才觉得圆滑流畅,字节笔划之间,竟如耳提亲聆般真切。大概这种的阅读方式才适合我吧,不过感觉整本书也正是一线串珠,随意拮取的方式。
略感不足的,就是讨论的深度不够:固然有回味无穷的点到即止,却少了可以恍然大悟的淋漓畅快。
书是好书,是属于那种比较有“大局观”的,能够在设计思想上给人启发的书。但是现时之世,热衷于遍寻奇技淫巧者多,所以这本书的染尘也是意料中事。就算是如今名声赫赫的《设计模式》,众多追风者中,又有几个认真拜读过?
初读时略感生晦,后来并不循章而进,随心翻至,才觉得圆滑流畅,字节笔划之间,竟如耳提亲聆般真切。大概这种的阅读方式才适合我吧,不过感觉整本书也正是一线串珠,随意拮取的方式。
略感不足的,就是讨论的深度不够:固然有回味无穷的点到即止,却少了可以恍然大悟的淋漓畅快。
| 我要写评论 |
| 查看所有评论交流(共12条) |








点击看大图





加载中...

