文件名称:More Effecitve C++(WQ版)
文件大小:1.32MB
文件格式:DOC
更新时间:2010-07-07 10:16:27
C++( Effecitve More
More Effecitve C++
作者 : Scott Meyers
译序、导读 : 侯捷
Item 1~28 : ZHC
Item 29~35 : WQ
附1 : 侯捷
附2 : WQ
附3、附4 : 陈崴
1. 译序(侯捷) 3
2. 导读 4
2.1 本书所谈的C++ 4
2.2 惯例与术语 6
2.3 臭虫报告,意见提供,内容更新 7
3. 基础议题 8
3.1 ITEM M1:指针与引用的区别 8
3.2 ITEM M2:尽量使用C++风格的类型转换 10
3.3 ITEM M3:不要对数组使用多态 14
3.4 ITEM M4:避免无用的缺省构造函数 16
4. 运算符 20
4.1 ITEM M5:谨慎定义类型转换函数 21
4.2 ITEM M6:自增(INCREMENT)、自减(DECREMENT)操作符前缀形式与后缀形式的区别 27
4.3 ITEM M7:不要重载“&&”,“||”, 或“,” 29
4.4 ITEM M8:理解各种不同含义的NEW和DELETE 32
5. 异常 37
5.1 ITEM M9:使用析构函数防止资源泄漏 38
5.2 ITEM M10:在构造函数中防止资源泄漏 42
5.3 ITEM M11:禁止异常信息(EXCEPTIONS)传递到析构函数外 51
5.4 ITEM M12:理解“抛出一个异常”与“传递一个参数”或“调用一个虚函数”间的差异 54
5.5 ITEM M13:通过引用(REFERENCE)捕获异常 60
5.6 ITEM M14:审慎使用异常规格(EXCEPTION SPECIFICATIONS) 64
5.7 ITEM M15:了解异常处理的系统开销 69
6. 效率 71
6.1 ITEM M16:牢记80-20准则(80-20 RULE) 72
6.2 ITEM M17:考虑使用LAZY EVALUATION(懒惰计算法) 74
6.3 ITEM M18:分期摊还期望的计算 81
6.4 ITEM M19:理解临时对象的来源 85
6.5 ITEM M20:协助完成返回值优化 87
6.6 ITEM M21:通过重载避免隐式类型转换 91
6.7 ITEM M22:考虑用运算符的赋值形式(OP=)取代其单独形式(OP) 93
6.8 ITEM M23:考虑变更程序库 96
6.9 ITEM M24:理解虚拟函数、多继承、虚基类和RTTI所需的代价 98
7. 技巧(TECHNIQUES,又称IDIOMS 或PATTERN) 106
7.1 ITEM M25:将构造函数和非成员函数虚拟化 107
7.2 ITEM M26:限制某个类所能产生的对象数量 111
7.3 ITEM M27:要求或禁止在堆中产生对象 125
7.4 ITEM M28:灵巧(SMART)指针 134
7.5 ITEM M29:引用计数 149
7.6 ITEM M30:代理类 177
7.7 ITEM M31:让函数根据一个以上的对象来决定怎么虚拟 190
8. 杂项 212
8.1 ITEM M32:在未来时态下开发程序 212
8.2 ITEM M33:将非尾端类设计为抽象类 216
8.3 ITEM M34:如何在同一程序中混合使用C++和C 226
8.4 ITEM M35:让自己习惯使用标准C++语言 231
9. 附录 237
9.1 推荐读物 237
9.2 一个AUTO_PTR的实现实例 241
9.3 在 C++ 中计算物件个数(OBJECTS COUNTING IN C++)译者:陈崴 244
9.4 为智能指标实作 OPERATOR->*(IMPLEMENTING OPERATOR->* FOR SMART POINTERS)译者:陈崴 254
1. 译序(侯捷)
C++ 是一个难学易用的语言!
C++ 的难学,不仅在其广博的语法,以及语法背後的语意,以及语意背後的深层思维,以及深层思维背後的物件模型;C++ 的难学,还在於它提供了四种不同(但相辅相成)的程式设计思维模式:procedural-based,object-based,object-oriented,generic paradigm。
世上没有白吃的午餐。又要有效率,又要有弹性,又要前瞻望远,又要回溯相容,又要能治大国,又要能烹小鲜,学习起来当然就不可能太简单。
在如此庞大复杂的机制下,万千使用者前仆後续的动力是:一旦学成,妙用无穷。C++ 相关书籍之多,车载斗量;如天上繁星,如过江之鲫。广博如四库全书者有之(The C++ Programming Language、C++ Primer),深奥如重山复水者有之(The Annotated C++ Reference Manual, Inside the C++ Object Model),细说历史者有之(The Design and Evolution of C++, Ruminations on C++),独沽一味者有之(Polymorphism in C++, Genericity in C++),独树一帜者有之(Design Patterns,Large Scale C++ Software Design, C++ FAQs),程式库大全有之(The C++ Standard Library),另辟蹊径者有之(Generic Programming and the STL),工程经验之累积亦有之(Effective C++, More Effective C++, Exceptional C++)。
这其中,「工程经验之累积」对已具C++ 相当基础的程式员而言,有著致命的吸引力与立竿见影的帮助。Scott Meyers 的Effective C++ 和More Effective C++ 是此类佼佼,Herb Sutter 的Exceptional C++ 则是後起之秀。
这类书籍的一个共通特色是轻薄短小,并且高密度地纳入作者浸淫於C++/OOP 领域多年而广泛的经验。它们不但开展读者的视野,也为读者提供各种C++/OOP 常见问题或易犯错误的解决模型。某些小范围主题诸如「在base classes 中使用virtual destructor」、「令operator= 传回*this 的reference」,可能在百科型C++ 语言书籍中亦曾概略提过,但此类书籍以深度探索的方式,让我们了解问题背後的成因、最佳的解法、以及其他可能的牵扯。至於大范围主题,例如smart pointers, reference counting, proxy classes,double dispatching, 基本上已属design patterns 的层级!
这些都是经验的累积和心血的结晶。
我很高兴将以下三本极佳书籍,规划为一个系列,以精装的形式呈现给您:
1. Effective C++ 2/e, by Scott Meyers, AW 1998
2. More Effective C++, by Scott Meyers, AW 1996
3. Exceptional C++, by Herb Sutter, AW 1999
不论外装或内容,中文版比其英文版兄弟毫不逊色。本书不但与原文本页页对译,
保留索引,并加上精装、书签条、译注、书籍交叉参考1、完整范例码2、读者服务3。
这套书对於您的程式设计生涯,可带来重大帮助。制作这套书籍使我感觉非常快
乐。我祈盼(并相信)您在阅读此书时拥有同样的心情。
侯捷2000/05/15 于新竹.*
jjhou@ccca.nctu.edu.tw
http://www.jjhou.com
1 Effective C++ 2/e 和More Effective C++ 之中译,事实上是以Scott Meyers 的另一个产品Effective C++ CD 为本,不仅资料更新,同时亦将CD 版中两书之交叉参考保留下来。这可为读者带来旁徵博引时的莫大帮助。
2 书中程式多为片段。我将陆续完成完整的范例程式,并在Visual C++,C++Builder,GNU C++ 上测试。请至侯捷网站(http://www.jjhou.com)下载。
3 欢迎读者对本书范围所及的主题提出讨论,并感谢读者对本书的任何误失提出指正。
来信请寄侯捷电子信箱(jjhou@ccca.nctu.edu.tw)。