作者:empty 页数:264 出版社:empty |
C++是一个难学易用的语言!C++的难学,不仅在其广博的语法,以及语法背後的语意,以及语意背後的深层思维,以及深层思维背梭的物件模型:C++的难学,还在於它提供了四种不同(但相辅相成》的程式设计思维模式:procedural-based, object-based, object-oriented, generic paradigm。世上没有白吃的午餐。又要有效率,又要有弹性,又要前瞻望远,又要回溯相容,又要能治大国,又要能烹小鲜,学习起来当然就不可能太简单。在如此庞大复杂的机制下,万千使用者前仆後续的动力是:一旦学成,妙用无穷。C++相关书籍之多, 车载斗量:如天上繁星, 如过江之。广博如四库全书者有之(The C++Programming Language、C++Primer) , 深奥如重山复水者有之(The Annotated C++ReferenceManual, Inside the C++Object Model) , 细说历史者有之(The Design and Evolution ofC++, Run i nations on C++) , 独沾一味者有之(Polymorphism inC++, Genericity inC++) ,独树职者有之(Design Patterns, LargeScale C++Software Design, C++FAQs) , 程式库大全有之(The C++Standard Library) , 另裤蹊径者有之(Generic Programming and theSTL) , 工程经验之累积亦有之(Effective C++, More Effective C++, Exceptional C++) 。这其中,「工程经验之累积」对已具C++相当基础的程式员而言,有著致命的吸引力与立竿见影的帮助。Scott Meyers的Effective C++和More Effective C++是此类佼佼,HerbS utter的Exceptional C++则是後起之秀。这类书籍的一个共通特色足轻薄短小,并且高密度地纳入作者浸淫於C++/00P领域多年而广泛的经验。它们不但开展读者的视野,也为读者提供各种C++/00P常见问题或易犯错误的解决模型。某些小范围主题诸如「在base classes中使用virtual destructor J.「令operator=传回*this的reference J, 可能在百科型C++语言书籍中亦曾概略提过,但此类书籍以深度探索的方式,让我们了解问题背後的成因、最佳的解法,以及其他可能的牵扯, 至於大范围主题, 例如smart pointers, t eference counting, proxy classes, doubledispatching, 基本上已属design patterns的层级!这些都是经验的累积和心血的结品。对C++程式员而言,日子似乎有点过於急促。虽然只商业化不到10年,C++却俨然成我很高兴将以下三木极佳书籍,规划为一个系列,以精装的形式呈现给您:1.Effective C++2/e, by Scott Meyers, AM 19982.More Effective C++, by Scott Meyers, AW 19963.Exceptional C++, by HerbS utter, AW 1999不论外装或内容,中文版比其英文版兄弟毫不逊色,本书不但与原文本页页对译,保留索引,并加上精装、书签条、译注、书籍交叉参考1、完整范例码2、读者服务3.这套书对於您的程式设计生涯,可带来重大帮助。制作这套书籍使我感觉非常快乐。我祈盼(并相信)您在阅读此书时拥有同样的心情
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欢迎读者对本书范围所及的主题提出讨论,并感谢读者对本书的任何误失提出指正。来信请寄侯捷电子信箱(jj hou lccc a.nctu.edu.tw) 。
为儿乎所有主要电算环境的系统程式语言霸主,面临程式设计方面极具挑战性问题的公司和个人,不断投入C++的怀抱.面那些尚未使用C++的人,最常被询问的一个问题则是:你打算什么时候开始用C++,C++标准化已经完成,其所附带之标准程式库幅员广大,不仅涌盖C函式库,也使之相形见,这么一个人型程式库使我们有可能在不必牺牲移植性的情况下,或是在不必从头撰写常用演算法和资料结构的情况下.完成琳琅满的各种复杂程式。C++编译器的数量不断增加,它们所供应的语言性质不断扩允,它们所产生的码品质也不断改善, C++开发工具和开发环境愈来愈丰富, 威力愈来愈强大, 稳健强固《robust) 的程度愈米愈高,商业化程式库几乎能够满足各个应用领域中的写码需求。改变,1990年人们想知道C++是什么东西,到了1992年,他们想知道如何运用它,如今C++程式员问的问题更高级:我如何能够设计出适应未来需求的软体?我如何能够改善程式码的效率而不折损正确性和易用性?我如何能够实作出语言未能直接支援的精巧机能?一旦语言进入成熟期,而我们对它的使用经验也愈来愈多,我们所需要的资讯也就随之这本书中我要回答这些问题,以及其他许多类似问题。本书告诉你如何更具实效地设计并实作C++软体:让它行为更正确:面对异常情况时更稳健强固:更有效率;更具移植性;将语言特性发挥得更好:更优雅地调整适应;在「混合语言」开发环境中运作更好:更容易被正确运用:更不容易被误用.简单地说就是如何让软体更好
积的智慧,大部份条款以准则的型式呈现,附随的说明则阐述这条准则为什么存在,如果不遵循会发生什么後果,以及什么情况下可以合理违反该准则。所有条款被我分为数大类。某些条款关心特定的语言性质,特别是你可能罕有使用经验的一些新性质。例如条款915专注於exceptions(就像Tom Cargill, Jack Reeves, HerbS utter所发表的那些杂志文章一样)。其他条款解释如何结合语言的不同特性以达成更高阶目标。例如条款25~31描述如何限制物件的个数或诞生地点,如何根据一个以上的物件型别产生出类似虚拟函式的东西,如何产生smart pointers等等。其他条款解决更广泛的题日, 条款16~24专注於效率上的议题, 不论哪一条款, 提供的都是与其主题相关且意义重大的作法。在More Effective C++我承认,就算标准委员会授意某语言特性或是赞同某实务作法,并非就保证该语言本书内容分为35个条款。每个条款都在特定主题上精简摘要山C++程式设计社群所累书中你将学习到如何更实效更精锐地使用C++,大部份C++教科书中对语言性质的大量描述,只能算是本书的一个背景资讯而已。这种处理方式意味,你应该在阅读本书之前便熟悉C++,我假设你已了解类别(classes) 、保护层级(protection levels) 、虚拟函式、非虚拟函式, 我也假设你已通晓templates和exceptions背的概念。我并不期望你是一位语言专家, 所以涉及较罕见的C++特性时,我会进一步做解释,2.1本书所谈的C++我在本书所谈、所用的C++, 是ISO/ANSI标准委员会於1997年11月完成的C++国际标准最後草案(Final Draft International Standard) 。这暗示了我所使用的某些语言特性可能并不在你的编译器(s)支援能力之列,别担心,我认为对你而言唯一所谓「新」特性,应该只有templates, 而templates如今几乎已是各家编译器的必备机能。我也运用exceptions, 并大量集中於条款9~15, 如果你的编译器(s) 未能支援exceptions, 没什么人不了,这并不影响本书其他部份带给你的好处。但是,听我说,纵使你不需用到exceptions.亦应阅读条款9~15.因为那些条款(及其相关篇幅) 检验了某些不论什么场合下你都应该了解的主题。特性已出现在月前的编译器上,或该实务作法已可应用於既有的开发环境上,一旦面对「标准委员会所议之理论」和「真正能够有效运作之实务」间的矛盾,我便两者都加以讨论,虽然我其实比较更重视实务,由於两者我都讨论,所以当你的编译器(s)和C++标准不致时,本书可以协助你,告诉你如何使用目前既有的架构来模拟编译器(s)尚未支援的语言特
3.1ITEMMI:指针与引用的区别.
3.3ITEM M 3; 不要对数组使用多态.
3.4ITEMM 4:避免无用的缺省构造函数
4.运算符.
4.1ITEM M 5:谨慎定义类型转换函数.
4.2ITEMM 6:自增(INCREMENT) 、自减(DECREMENT) 操作符前缀形式与后缀形式的区别
4.3ITEM M 7:不要重载“&&”, , 或“, .29
4.4ITEMM 8:理解各种不同含义的NEW和DELETE.32
5.异常.37
5.1ITEM M 9:使用析构函数防止资源泄漏.38
5.2ITEM M 10:在构造函数中防止资源汁漏.42
5.3ITEM M 11:禁止异常信息(EXCEPTIONS) 传递到析构函数外.51
54ITEMM 12:理解“抛出一个异常”与“传递一个参数”或“调用一个虚函数”间的
差异54
5.5ITEMM 13:通过引凡(REFERENCE) 捕获异常.60
5.6ITEMMI 4:审慎使用异常规格(EXCEPTION SPECIFICATIONS) .,.64
5.7ITEM M 15:了解异常处理的系统开销.69
6.效率.71
6.1ITEM M 16:牢记80-20准则(80-20RULE).72
6.2ITEM M 17:考虑使用LAZY EVALUATION(懒忙计算法).74
6.3ITEM M 18:分期摊还期望的计算.81
64ITEM M 19:理解临时对象的来源.85
6.5ITEMM 20:协助完成返回值优化.87
6.6ITEM M 21:通过重载避免隐式类型转换.91
67ITEM M 22:考虑用运算符的赋值形式(OP-) 取代其单独形式(.93
6.8ITEMM 23:考虑变更程序库.96
6.9ITEMM 24:理解虚拟函数、多继承、虚基类和RTTI所需的代价.98
7.技巧(TECHNIQUES, 又称IDIOMS或PATTERN) .106
7.1ITEM M 25:将构造函数和非成员函数虚拟化.107
7.2ITEM M 26:限制某个类所能产生的对象数量.111
7.3ITEM M 27:要求或禁止在堆中产生对象.125
7.4ITEM M 28:灵巧(SMART) 指针.134
7.5ITEMM 29:引用计数.149
7.6ITEM M 30:代理