(一)语言入门:
《C++ Primer》
最新版本:第三版(第四版国外已上架,国内一些网上书店也在预订中)
适合有丰富C经验,缺乏C++经验的。不过我个人一直认为此书带着过于强烈的C语言的痕迹,对于C++的学习未必是好事。
《The C++ Programming Language》/《C++程序设计语言》
最新版本:第三版特别版
简称TC++PL,有其他语言的丰富经验的。(也有人简称之为“TCPL”,但需与另一本《The C Programmer Language》区分开来)
《Essential C++》
《Accelerated C++》
这两本薄一些,都是不错的选择。《Accelerated C++》本人没有读过,从各方面的评价来看,完全值得推荐。
以上几本书都有相应的中文版,而且翻译的质量都不错。上面的书未必都需要读一遍,但无论如何,TC++PL是应该阅读的。
(二)进阶A:
这个路线侧重于语言本身
《Effective C++》
最新版本:第二版(第三版国外已上架,国内一些网上书店也在预订中)
简称EC。C++程序员必读!很多时候,我们说C++圣经不是指TC++PL,而是这一本。《The Pragmatic Programmer》一书中写到:“一旦你发现自己要参与C++项目的开发,赶快跑(不要走)到书店去购买Scott Mayer的《Effective C++》,可能还要《More Effective C++》”。
《C++ Coding Standards: 101 Rules, Guidelines, and Best Practices》/《C++ 编程规范》
个人认为此书应为C++程序员必备的案头书。几乎Effective系列和Exceptional系列都在这里得到了总结。最新的模版、异常的业界经验都在这里的到了体现。可能的唯一缺陷就是对一个新手而言,关于“为什么这么做”的问题,解释的不够。
我的看法是:如果你不理解其中的条款,记忆,并且照做;如果你理解其中的条款,我猜你一定会同意书中的观点。我认为这本书中的内容至少在2009年以前都不会过时,人们将广为传诵它制定的101条戒律。
还不知道他的简称,也许“101”会成为一个候选者?
提到《Effective C++》,那么另外三本书一一浮出水面:
《More Effective C++》
《Exceptional C++》
《More Exceptional C++》。
新书《Exceptional C++ Style》也是值得一看的好书。
上述几本书,一本也不应该放过。
个人建议上述书籍按顺序阅读。并且,在将来反复阅读这几本书。
(三)进阶B:
这个路线侧重于程序库。
《The C++ Standard Library》/《C++标准程序库—自修教程与参考手册》
听说过STL吗?这本书会教你最基本的,也是最重要的STL的使用。这本书,应该是必读的。
《Effective STL》
会使用STL还不够,还必须知道什么时候选择什么STL组件,这是STL使用的必读书。
《Generic Programming and the STL: Using and Extending the C++ Standard Template Library》/《泛型编程与STL》。
这本书理论性较强,但是真的很严谨,而且并不是非常难懂。理解其中对于Concept的解释,将是非常重要的。
《C++ STL》
这不是讲述使用程序库的,而是讲述程序库实现原理的。肠胃不好的,需要慢慢吸收。
这个路线的书,仍然是建议按顺序阅读。
进阶A、进阶B两个路线应该是可以并行的。
其他进阶参考书
提出这些参考书,只是避免争议,也为开阔视野,笔者并不曾完全读过所有的。
《Thinking in C++》/《C++编程思想》
这本书及其中文版传言好坏都有,没有认真看过,不做评价,如果确有兴趣,不妨尝试一下该书。
以下几本书基本上涉及的都是语言本身,大体上可以按照以下的顺序阅读。
《C++必知必会》
如果早一年,这本书将是重量级的,然而它被101和《Exceptional C++ Style》盖过一头。
《C++ Gotchas: Avoiding Common Problems in Coding and Design》/《C++程序设计陷阱》
这又是一本我未曾读过,而且广受好评的书。
《STL 源码剖析》
这本书我刚到手,就被人"借"走,以至于到现在也没有看过。看过这本书的朋友,可以给一个合适的评价。
高级:
《The Design and Evolution of C++》/《C++语方的设计和演化》
简称D&E,内容并不艰深,Bjarne的书,仅此,就值得一读。
前段时间,互动网曾8块一本(人民币)贱卖此书,现在好像没了。
《Inside The C++ Object Model》/《深度探索C++对象模型》
C程序员读后一定会觉得C++原来并不神秘。
《C++ Template》
在阅读STL、Boost或者Loki的源代码之前,请仔细阅读本书,它可以减轻一些阅读的烦恼。这本书是讨论C++模版的权威。
《Modern C++ Design Generic Programming and Design Patterns Applied》/《C++设计新思维——泛型编程与设计模式之应用》
简称MCD。在阅读MCD之前,建议先阅读一下《C++ Template》。
《对象揭秘:Java、Eiffel和C++》
你对C++不满吗?这本书可以部分地帮你完成抱怨的目标。也许它还可以让你不迷信C++。
《C++ Primer (3RD)中文版》
C++ Primer的第三版结合了Stanley Lippman的实践经验和Josée Lajoie对于ANSI/ISO标准C++的深入理解。这本指导书的第三版已经被重新改写过,以便更加精确地讲述标准C++的特性和用法。在本书中,对于C++初学者特别有价值的是一些来自真实世界中的程序例子,它们说明了泛型程序(generic program)的设计、面向对象程序的设计、模板的用法,以及使用标准C++进行程序设计的方方面面。而且,本书也在适当的地方讲到了一些习惯用法以及效率指导。
《C++ STL(中文版)》
本书对C++ STL进行了全面而深入的阐述。STL(标准模板库)是在惠普实验室中开发的,已纳入ANSI/ISO C++标准。其中的代码采用模板类及模板函数的方式,可以极大地提高编程效率。本书由P.J. Plauger等四位对C++ STL的实现有着卓越贡献的大师撰写,详细讨论了C++ STL的各个部分。全书分为16章,其中的13章通过背景知识、功能描述、头文件代码、测试程序和习题,分别讲述了C++ STL中的13个头文件,其他章节介绍了STL中广泛涉及的三个主题--迭代器、算法和容器。本书附录列出了接口和术语表,最后列出了参考文献。 本书适合对C++有一定了解的程序员及高等院校师生阅读。
《C++多范型设计》
C++是一种支持多种范型的编程语言:类、重载函数、模板、模块以及过程编程,等等。除了该语言的灵活性和丰富性以外,此前创建一种设计模式以支持在单个应用中使用多种范型的努力还很欠缺。
本书介绍了使用多范型设计的一连串框架,提供了形成正式多范型设计方法的基础的一系列超前的设计实践。
本书提供了利用C++的多范型能力的分析过程和设计过程的知识。书中使用易于理解的记法和易读的解释来帮助所有的C++程序员(不仅是系统构建工程师或设计者)在他们的应用开发中组合多种范型,以获得更加高效、健壮、更具可移植性和更容易复用的软件。
读者将获得对支持多范型设计的领域工程方法的理解、本书揭示了如何使用共同性和差异性的原则来分析应用领域,从而根据最适合每个领域的范型来定义子领域。多范型设计比任何一种技术或方法挖掘得更深,以处理软件抽象和设计的基本问题。
本书介绍了所有形成领域工程基础的概念和技术、这些概念包括:深入了解共同性和差异性分析,领域工程如何与常用设计模式相互影响,如何找到应用领域中的抽象,以及领域工程的原则如何用作对象范型的抽象技术的基础。最重要的是,本书讨论了在设计阶段如何将最适当的范型应用于实现的分析技术。
《C++编程——数据结构与程序设计方法》
本书特点:
■ 本书所有程序源代码都以ANSI/ISO 标准C++和标准C++形式提供,并可以使用Microsoft Visual C++ 6.0,Borland C++ Builder 5 开发工具,或是 Metrowerks CodeWarrior来编译这些程序。
■ 每章后面的程序范例都是完整的程序代码。这些程序范例中包括输入、输出、问题分析和算法设计等具体步骤,并提供了完整的程序代码清单。
■ “小结”部分总结了每章的重要概念。
■ “练习”测试学生标识声明和语句正误的能力。
■ “编程练习”培养学生亲自动手编写C++程序的能力。
■ “注意”强调了各章节中重要概念的注意事项。
■ 每章中统一编号的例题通过相应代码来帮助读者理解程序设计的概念。
D. S. Malik
D.S. Malik现任Creighton大学数学与计算机科学系教授。他1985年获得Ohio大学博士学位。自从在Creighton大学任教以来,他一直在讲授计算机程序设计课程。D.S. Malik在抽象代数、模糊自动机理论及语言、模糊逻辑及应用和信息科学领域发表了超过45篇论文并出版了6本图书。
《STL 源码剖析》
这本书不适合C++ 初学者,不适合 Genericity(泛型技术)初学者,或 STL 初学者。这本书也不适合带领你学习面向对象(Object Oriented)技术 — 是的,STL 与面向对象没有太多关连。本书前言清楚说明了书籍的定位和合适的读者,以及各类基础读物。如果你的Generic Programming/STL实力足以阅读本书所呈现的源码,那么,恭喜,你踏上了基度山岛,这儿有一座大宝库等着你。源码之前了无秘密,你将看到vector的实现、list的实现、heap的实现、deque的实现、RB-tree的实现、hash-table的实现、set/map 的实现;你将看到各种算法(排序、搜寻、排列组合、数据移动与复制…)的实现;你甚至将看到底层的memory pool 和高阶抽象的traits 机制的实现。那些数据结构、那些算法、那些重要观念、那些编程实务中最重要最根本的珍宝,那些蜇伏已久彷佛已经还给老师的记忆,将重新在你的脑中闪闪发光。
《数据结构C++语言描述—应用标准模板库(STL)(第2版)》
本书是Ford和Topp两位教授于1996年出版的名着Data Structures with C++的第2版,在全球范围内已经有数以万计的学生从中受益。
作者将C++语言作为算法描述语言,应用包含规范化的数据结构的标准模板库,集中讲述了数组、向量、表、关联树容器,以及集合、映射、堆、哈希表和图等数据结构及其算法,重点讨论了如何高效地存储大型数据集合,涵盖了数据结构初级和高级教程的最新内容。书中各章章前提出学习目标,章后附有丰富的练习题、答案以及书面练习和上机编程练习,指导读者迅速、全面地掌握核心知识点和编程技巧。
本书可作为计算机及相关专业数据结构课程的核心教材,对于广大研发人员,也是一本数据结构与面向对象技术完整结合的全新技术参考用书。
《C++编程艺术》
本书揭示了C++程序员创建世界级软件的奥秘。程序设计大师Herbert Schildt通过将C++语言广泛应用于功能强大的编程任务中,全面展示了C++语言的多功能性,敏捷性,和艺术性。本书内容包括探索C++的功能,创建内存管理的垃圾回收器子系统,开发线程控制面板,建立译码器以扩展C++的功能,开发可断点续传的Internet文件下载工具,创建财务分析库,用基于AI的搜索技术探索人工智能,建立定制的STL容器,以及开发Mini C++解释程序。书中所有示例和项目的源代码都可以从www.osborne.com 上免费下载。
《C++编程惯用法——高级程序员常用方法和技巧》
在本书中,C++专家Rob Murray就与我们分享了他宝贵的经验和建议,以帮助初中级C++程序员得到进一步的提高。 作者大量采用了实际开发中的代码来作为示例,向读者展示了那些有用的编程策略,并对那些有害的做法进行了警示。为了帮助读者更好地理解,在书中的每一章结束前,在该章中被介绍过的主要内容都被放到了一个列表中,此外,书中还给出了一些问题来激励读者们进行更多的思考和讨论。
本书在一开始就向我们讲解了如何为我们的设计选择正确的抽象,提示我们注意抽象和实现之间的区别—然后,我们就将学到如何将己得到的抽象转化成一个(或多个)C++中的类,期间进行的讨论所涵盖的范围上至高层的设计策略,下至底层的接口和实现细节。
对于C++中新增的模板特性,通过从基础开始到逐步地接触实际应用中的示例,Rob Murray向我们展示了其空前的洞察力。作者同时也向我们展示了多种特定的技巧,以使我们的程序更快、重用性更高,并且更健壮。异常是C++中另外一个新增的特性,对于何时该使用它,何时不该使用它,Murray也向我们给出了他的建议-在本书的最后,我们还可以学到如何将一个项目从C移植到C++之上,书中对该过程的讨论不但包括了其中可能出现的技术问题,也包括了使用技术的“人”的问题。
作者Robert B.Murray在撰写该书时是量子数据系统公司(Quantitative Data Systems)中负责软件工程的副总裁,该公司的业务包括向财富500强(Fodune 500)中的公司提供面向对象的软件解决方案 在此之前,他曾经在AT&T的Bell实验室工作,在那里他参与了C++语言、编译器以及库的开发。他同时也是《The C++ Report》杂志的创立编辑(founding editor),主持Obfuscated C++专栏。从1987年起,他就开始在学术会议和专业会议上向人教授C++语言。目前Murray在FNIS公司进行着软件开发的管理,他的兴趣主要包括:程序语言的开发和工具,以及轻量级的开发过程(如极限编程)
译者王昕 自1995年起接触C++编程,参与过多个C++项目的开发。曾在网上和杂志上发表过多篇有关C++的 文章。主要兴趣包括:程序语言的开发、形式化理论、软件开发方法学等。
《C++精髓软件工程方法》
C++是一种大型而复杂的语言,其设计目标是作为一种通用的工程语言。本书分4个部分共19章,不仅详细介绍了C++语言的基本语法,而且讲解了C++的高级应用(如虚函数、模板、异常等),并通过大量详尽的代码表达了有关软件工程及维护的观点。全书贯穿了面向对象程序设计思想,不断强调开发可重用的、可移植的和易维护的程序的重要性。本书专门为希望将实际经验与C++的具体细节相结合的专业人士而编写,也是一本学习C++语言的好教材,对初学编程的读者也大有裨益。
《C++参考大全(第四版)》
本书是根据着名C语言专家Herbert Schildt的着作翻译的。这是一本关于C++语言的百科全书,包括C 和C++的命令、功能、编程和应用等方面的内容。全书分为五个部分:C++基础:C子集;C++的专有特征;标准函数库;标准C++类库;C++应用程序范例。详细描述和演示了定义C++语言的关键字、语法、函数、类和特征。其中第一部分全面讨论了C++的C子集;第二部分详细介绍了C++本身的特性,如类和对象、构造函数、析构函数和模板等;第三部分描述了标准函数库;第四部分讨论了标准类库,包括STL(标准模板库);第五部分显示了两个应用C++和面向对象编程的实际例子。 本书内容全面、翔实,是学习C++编程语言的广大学生的一部有用的工具书,也是对C++感兴趣的读者的必备参考书。
《标准C++编程宝典》
本书特色: ·全方位领略C++的强大功能,轻松掌握所有相关知识; ·通过由浅入深、由易到难的典型实例,快速精通C++编程; ·运用C++强大灵活的类机制编写一流的面向对象程序 ·利用标准C++库进行简单、高效的应用程序开发。 C++内容丰富、功能强大,是全世界专业编程人员的首选语言。本书内容全面、实例典型,且自成体系,是C++语言的完整教程。 标准C++是C++的国际性标准版本,本书以标准为基础,对C++进行了全面介绍。 本书从最基本的内容讲起,对C++的强大功能进行了详细介绍;运用C++的最新功能,详细论述了面向对象编程的思想;同时,还介绍了C++和C的不同之处。配上自成体系,是C++语言的完整教程,不要求读者预先掌握C语言。本书针对那些比较高深难懂的内容也做了深入浅出的介绍,比如模板(包括函数模版、类模版和标准模板库)、名字空间以及守行时类型信息(RTTI)等,这些功能对于开发大型复杂系统的程序设计人员来说是非常重要的。因此,无论是新手还是有经验的程序员,都可以从本书获取所需要的知识。 本书内容综合、全面,叙述流畅、清晰,实例典型、丰富,主要针对那些既不懂C也不懂C++、但又希望学习C++的程序员,是一本从门入到提高的经典书籍。
《C++游戏编程》
本书从游戏开发的角度出发,把C++应用到游戏软件领域。介绍一些C++的实战经验,用常规的C++技术解决游戏开发者经常遇到的问题。重点讲述已经在实际的项目中应用的技术,而不是大段地罗列代码。 本书是游戏开发经典丛书系列之一,适合游戏开发人员、业余游戏软件开发爱好者和有关游戏软件开发培训班使用,也可以人秋大专院校相关专业的参考书。
《C++编程思想 第2卷:实用编程技术》
《C++编程思想》(第1版) 荣获1996年度《软件开发》杂志的图书震撼大奖 (Jolt Award),成为该年度最佳图书。
本书内容:
·介绍实用的编程技术和最佳的实践方法,解决C++开发中最困难的课题
·深入研究标准C++库的功能,包括:字符串、输入输出流、STL算法和容器
·讲述模板的现代用法,包括模板元编程
·解开对多重继承的困惑,展示RTTI的实际使用
·深入探究异常处理方法,清晰解释异常安全设计
·介绍被认为是标准C++下一版特征之一的多线程处理编程技术,并提供最新研究成果
·对书中包含的所有示例代码都提供免费下载,这些代码段经过多个软件平台和编译器(包括基于Windows/Mac/Linux的GNU C++编译器) 的测试,稳定可靠。
在本书作者的个人网站www.BruceEckel.com上提供:
·本书的英文原文、源代码、练习解答指南、勘误表及补充材料
·本书相关内容的研讨和咨询
·本书第1卷及第2卷英文电子版的免费下载链接。
《C++高级编程》
本书既系统全面又突出重点,作者从C++基础知识讲起,始终着眼于C++语言的编程实践,提供了大量实践示例和解决方案,包括如何更好地实现重用、如何有效地测试和调试等C++专业人员常用的一些技术与方法,还提供了一些鲜为人知的、能大大简化工作的C十十语言特性;最后,还配有大量可重用的编码模式,并在附录中提供C十十面试宝典作为开发人员的实用指南。.
《C++必知必会——图灵程序设计丛书》
本书面向进阶C++的初学者,以及那些想把C++水平提高到专业水准的程序员和开发人员。...
本书描述了C++编程和设计中必须掌握但通常被误解的主题,这些主题涉及的范围较广,包括指针操作、模板、泛型编程、异常处理、内存分配、设计模式等。作者根据本人以及其他有经验的管理人员和培训老师的经验总结,对与这些主题相关的知识进行了精心挑选,最终浓缩成63条。每一条款所包含的内容均为进行产品级C++编程所需的关键知识。作者称这些知识为C++程序员必备的“常识”,其实并非意味简单或平庸,而是“必不可少”。
本书适合于中、高级C++程序员,也适合C或Java程序员转向C++程序设计时参考
深入阅读:
《Visual C++ .NET技术内幕(第6版)》
本书特色:
·既有原理性的说明,也有指导性的介绍,还有很好的例子来帮助理解一些技术细节。
·在讲解的时候语言简洁不啰嗦
·作者对于前面部分的传统内容有所精简,以便为后面的内容腾出空间。
本书新增内容(主要是与第四版相比较)
·本书的前三部分内容主要针对桌面应用程序的开发,这既是MFC的传统优势,也是本书的传统优势。
·本书第四部分介绍了COM、自动化、ActiveX和OLE。
·除了传统的C++编程之外,Visual C++ .NET还引入了一种新的编程模式
·Internet开发是一个不可错过的部分。
·最后一部分介绍Microsoft .NET程序设计。这是本书完全新增的内容。
本书是经典的“Visual C++技术内幕”的最新版。Visual C++一方面是一个C++实现,它提供了一个功能强大的集成开发环境;另一方面,它提供了一些C++类库,其中最具影响力的当然是MFC。随着Visual C++的发展,MFC已经不是Visual C++中唯一的类库了,其他还有ATL、STL等。此外,Visual C++还融合了大量的开发工具,特别是与Internet相关的开发支持。最后,本书也介绍了Visual C++对.NET的支持。总体而言,本书涵盖了当前最新的Visual C++的主流技术,既有对老技术的继承和更新,也有对新技术的精辟阐述。所以,阅读本书可以全面拓宽读者的知识面。从这层意义上讲,本书相当于Visual C++的百科全书,它浓缩了Visual C++的精华。本书面向中级Visual C++程序设计人员,并可以作为高年级计算机专业学生及软件学院学生的程序设计教程
《Visual C++ 6编程宝典》
本书特色: ·从常规主题入手,逐步深入高级领域,各项技术逐一开讲 ·近百个实例,上万行代码,既可直接借鉴,又可举一反三 ·讲述技术来源于实践,贴近开发人员的日常工作 Visual C++语言虽然在从业人员的数量上不占绝对优势,但究其性能无其他语言能其右。学习本书,必将俯到其中的美妙之处。 本书介绍了如何使用Visual C++ 6编程语言编写Windows应用程序。本书的作者具备多年的Windows应用程序开发经验,是一些程序开发的高手。他们将带领读者从基本的集成开发环境与调试环境的学习入手,进而学习菜单和鼠标、图形、对话框的设计,最后进入Internet程序设计和数据库连接等高级主题。如果你对面向对象的程序开发有所了解,并想学习或进一步提高Visual C++方面的开发知识与技巧,那将从书中获得启迪,有所收益。 本书适合初、中级软件开发人员及广大计算机编程方面的爱好者。
《Visual C++.NET完全手册》
本书通过大量实用的例子,系统全面地介绍了C++语言和Microsoft Visual C++ .NET集成开发环境,目的是帮助读者快速高效地开发出运行在Windows ME、2000和XP下的应用程序。 本书内容丰富,全书共分为六个部分。主要介绍了Microsoft Visual C++ .NET编程工具,C++语言的基本概念,面向对象程序设计,Windows编程环境的基本概念、术语和方法,Windows与向导,高级编程主题,包括C#语言、OLE、ActiveX和DLL等。每一部分都给出了大量例程,引导读者逐步深入地学习。本书最后还有两个附录,可以从中查阅相关参数。 本书注重基本概念和方法,同时也与实际应用紧密联系,不仅可以作为Visual C++新手的入门教材,也可以作为长期从事应用软件开发的中高级用户的参考手册。
最后,一份C++标准文档也是应该加以咀嚼的。
还有一些书籍,并不能简单的归于C++,也难以在纯粹的书本学习中加以掌握。《Design Patterns》/《设计模式》一书就归于此类。
所有上述的书籍,要么谈论C++语言本身,要么谈论STL的,要么兼而有之(当然严格讲STL也是C++语言非常重要的一部分)。偶尔,某些书中条目也会涉及实际工程。这些书并不是C++软件开发的全部,但是他们很重要。阅读这些书,未必需要化费太多的精力,有时候是会困难,但也有时候会很快速。
最后,编程语言并非计算机科学技术的全部,尤其对于在校的学生来说,打好基础、开阔视野都是非常重要的。