《More Effective C++》
《高质量程序设计指南--C++/C语言(第3版)》 林锐 韩永泉 编著
C++ 是一门难学易用的语言!
C++ 的难学,不仅在其广博的语法、语法背后的语义、语义背后的深层思维、深层思维背后的对象模型;C++ 的难学,还在于它提供了4种不同(相辅相成)的编程思维模型:procedural-based,object-based,object-oriented,generic paradigm。
世上没有白吃的午餐。又要有效率,又要有弹性,又要前瞻望远,又要回溯相容,又要能治大国,又要能烹小鲜,学习起来当然就不可能太简单。
在如此庞大复杂的机制下,万千使用者前赴后继的动力是:一旦学成,妙用无穷。
另辟蹊径者有之(Generic Programming and the STL),
这其中,"工程经验之累积"对已具 C++ 相当基础的程序员而言,有着致命的吸引力与立竿见影的帮助,其特色是轻薄短小,高密度地纳入作者浸淫于 C++/OOP 多年而广泛的经验。它们不但开扩读者的视野,也为读者提供各种 C++/OOP 常见问题的解决模型。某些小范围主题诸如"在base classes 中使用 virtual destructor"、"令operator= 传回 *this 的 reference",可能在百科型 C++ 语言书籍中亦曾概略提过,但此类书籍以深度探索的方式,让我们了解问题背后的成因、最佳的解法,以及其他可能的牵扯。至于大范围主题,例如smart pointers,reference counting,proxy classes,double dispatching,基本上已属design patterns的层级!
c++经典书籍
原文: http://blog.163.com/yujishui2887090@126/blog/static/217925202007101692235256/
这几本让读者和我在期待的C/C++巨著就是这期我要推荐的——《Essential C++中文版》、《Effective C++中文版》、《The C++ Programming Language》和《C++ Primer》。
Essential C++(Addison Wesley Pub Co.,1999年10月第一版)的作者Stanley B. Lippman更是C++领域一流的大师级人物,他从1984年开始就与C++结下了不解之缘:参与了第一个C++编译器C Front的开发,曾经和C++之父Bjarne Stroustrup(详见下)一起在贝尔实验室的项目组工作、负责研究C++程序开发环境中的对象模型,后来又担任著名的C++Report杂志编辑,此后他到迪斯尼旗下的梦工厂出任软件技术总监(Software Technology Director),主要著述有Essential C++、C++Primer、C++Gems、Inside the C++ Object Model、C#Primer等,关于作者的更详细信息可以到其个人网站(http://www.objectwrite.com/,该网址笔者已验证无误)查询。
Lippman当前在业界的影响力可以从最近发生的一件事情看出:不久前微软已经邀请了C++编程语言的先驱Stanley B. Lippman加盟它的Visual C++.Net开发小组,以打消广大的C++编程人员的疑虑。
Essential C++是Lippman在C++ Primer之后的著作,可以说是厚积薄发的精髓之作。不要想当然地觉得这本书只有276页就是烹小鲜的入门向导——其实,我到觉得如果想通过一本书入门,1237页的C++ Primer或1109页的The C++ Programming Language更加适合。
Essential C++分为7个章节,分别是C++基础、面向过程的编程风格、泛型编程风格、基于对象的编程风格、面向对象的编程风格、运用模板编程和异常处理。从结构的安排上我们可以看出作者的深意所在:并不是要手把手地教你键入和编译调试一个类似“Hello World”的程序,而是要一步一步地教会读者通过函数、指针、模板、类等构件形成一套完整的编程思想,在不同的需求情况下能够自如地使用面向过程或面向对象的方法进行程序设计,正如Bjarne Stroustrup在The C++ Programming Language一书中引用Kristen Nygaard(Simula语言的两位创造者之一)所说的“Programming is understanding”。
如果你是一个新手,在阅读本书的时候不要忘了找一本更详细一些的参考教材——作者只用了30页的篇幅讲C++变成的基础知识,这里面还包括了数组、向量和指针等内容,《Essential C++中文版》(华中科技大学出版社,2001年8月第一版)已经出版,是侯捷的译著——恐怕业内很少有人不知道这位台湾大名鼎鼎电脑教育作家,建立在深刻理解基础上的翻译质量几乎可以说是无可挑剔了,但对于一些词汇的翻译方法和大陆翻译习惯的差异还有待磨合和改进(虽然译者坚持保留其繁体版译法)。
Effective C++(Addison Wesley Pub Co.,1997年9月第二版)没有教你C++语法或函数、对象、模板之类的东西,这是一本风格独到的经典技巧集,曾经获得过1992年度Jolt Award and Productivity Awards,作者教给你的是50个“改善程序技术与设计思维”的特别途径。
Scott Meyers是C++业界公认的权威,主要从事软件开发咨询工作,活跃在全球各技术研讨会上,同时是C++ Report的重要专栏作家,知名著述出了Effective C++之外还有More Effective C++和Effective STL等,关于作者的更详细信息可以到其个人网站(http://www.aristeia.com/)查询。
《Effective C++中文版》(华中科技大学出版社,2001年9月第一版)也已经在国内翻译出版,译者还是侯捷。当你初步了解C++的全貌之后,Effective C++能够在短时间内大幅度地提高你C++编程的水平,此书的独特之处在于每一个你遇到的C++问题,Meyers都好像未卜先知地放在了书里,所有让你困惑的问题你几乎都可以在这本书中找到精辟的论述——如果能加Meyers的另一本巨著More Effective C++(Addison Wesley Pub Co.,1995年12月第一版)将更会锦上添花。
本书在结构上分为改变旧有的C习惯、内存管理、构造析构函数与作业运算符、类与函数的设计和声明、类与函数的实现、继承关系与面向对象设计以及杂项讨论7个部分。很多人都认为你越熟悉C语言或其他面向过程的语言,在学习面向对象的语言的时候就会面临更大的困难,的确,如果你已经习惯了面向过程,在面向对象的时候你还是无法忘记过程,为此,Meyers在第一部分就提出了改变旧有的C习惯,通过几个小技巧让你能够尽量不受原有知识对新知识学习的干扰。
在接下来的3个部分中,作者又针对让人头疼的内存管理问题(Java就宣称采用自动内存管理减少了编程复杂程度和出错几率是比C++的一大进步),随后,作者针对函数与类的构造析构、设计、实现等问题进行了详实的讨论,没有枯燥的长篇大论,都是结合实例的分析讲解——如果你刚学C++不久但已经可以独立编写一些简单的程序,你会发现所有被批判的问题程序中都可以找到自己的影子,这真是一件奇妙的事情!
在“继承关系与面向对象设计”部分里作者没有喋喋不休地去讨论尚有争议的问题,而是把精力放在最基础的理念上,澄清了C++中类的继承体系设计与实现,并结合继承问题阐释了OOP。“杂项讨论”中作者主要讨论了编译、标准库等问题。
打一个粗俗些的比方:Effec tiv e C++和M o re Effec tiv e C++就像是C++学习者的手挠,每一下都抓在你的痒处。
The C++ Programming Language(Addison Wesley Pub Co.,2000年2月第三版,高等教育出版社,2001年8月影印版)是无论哪一个C++学习者绝对、绝对不能错过的头号经典。
Rogue Wave公司(Boland C++ Builder中STL方案的提供商)的Nathan Myers说:“15年之后,此书仍然是唯一一本无可替代的C++书籍。”只要有人推荐C++书籍,此书必在其中。正如侯捷先生1999年C++Primer繁体版前言中评价所说:“C++/OOP的领域极广……,不同的切入角度,都存在不同的经典好书。但如果考量的是语言全貌性(百科型)书籍,从来我只推荐两本,一是Bjarne Stroustrup的The C++ Programming Language,另一是Stanley B.Lippman的C++ Primer。这么说难免遗珠之憾,但是泰山北斗已现,又何必案牍劳形于墨瀚书海之中!这两本书都从C++盘古开天以来,一路改版,斩将搴旗,追奔逐北,成就一身荣光”。
作者Bjarne Stroustrup是贝尔实验室大规模程序设计研究部门(Large-Scale Programming Research Department)负责人,AT&T、ACM成员,主要著述有The C++ Programming Language、The Design and Evolution of C++、The Annotated C++ Reference Manual、C++ In-Depth Box Set(与别人合著)等。
1979年Stroustrup开始开发一种语言,当时称为“C with Class”,后来演化为C++,并于1995年在贝尔实验室研制成功并投入使用的,Stroustrup也被称为“C++之父”,关于作者的更详细信息可以到其个人网站(http://www.research.att.com/~bs/homepage.html)查询。
1998年,ANSI/ISOC++标准建立,同年,Strousturp推出了其经典著作The C++Programming Language的第三版。The C++Programming Language可是说非常全面、权威,充满了技术性极强的材料,很多地方值得反复回味与思索。
Stroustrup说,他所接触和开发的软件无论是在大小、复杂性和难度来说,根本不是外界一般软件所能比拟的。本书虽然是一本计算机编程语言教程,但是处处体现出他对于软件开发和程序设计的看法。所以他在书中的很多观点虽然看上去不觉得有什么了不起的地方,但是当你面临到真正挑战的时候,就会深刻体会到其真知灼见非同一般。即便我们不考虑语言的障碍,这本书仍然比较难懂,作者很多地方点到即止,其中深意不是初学者能够真正领会的。
这本书有个绰号——C++专家自学指南,也就是你必须先是专家,然后再来读此书自学提高。
C++ Primer是Lippman的成名大作——不要看到这个名字就真认为这是“C++的初级读本”,实际上它是一本标准的“从入门到精通”教材,目前该书的简体中文版还没有上市,我到处寻找其英文版也没能如愿,一个偶然的机会在朋友那里看到了侯捷(见上关于此书的评价)繁体中文版的C++Primer,大体翻看了一下,感觉此书在实例方面非常详尽,内容可谓是全面、权威,通俗易懂。
初学者只要能够认真学通这本书,足以能自由使用C++编写程序,成为C++的高手。C++ Primer对标准C++提供了广泛的介绍,提供了一个思考性的C++学习方案,C++中的重要该概念诸如异常处理、容器类型、面向对象的程序设计等等都体现在字里行间,对语言规则也进行了深入地探讨,是一本非常好的入门也是提高的教程和参考。
全书共分为20章,从C++最基本的元素、数据类型到面向过程的程序设计到泛型算法到基于对象与面向对象的程序设计等等,洋洋洒洒,蔚为大观。此书将由中国电力出版社近期推出简体中文版,由潘爱民(《COM原理与应用》的作者,《Visual C++技术内幕(第四版)》、《深入理解COM+》、《COM本质论》、《深入解析ATL》的译者)主译。