首页>参考读物>计算机科学与技术>软件与程序设计

Essential C++ (注释版)
作者 : (美) Stanley B. Lippman  著
译者 : 徐旭铭 金萍华 注释
丛书名 : 经典重读
出版日期 : 2010-08-20
ISBN : 978-7-111-31221-5
定价 : 49.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 297
开本 : 16
原书名 : Essential C++(1E)
原出版社: Pearson Education Asia
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书是学习C++的经典教程。不仅备受C++之父等国外专家的推崇,而且也得到了侯捷、孟岩、荣耀等国内C++专家的喜爱。翻译版、影印版分别有华中科大和人民邮电出版后,多次重印,至今畅销不衰。时至2009年,仍有读者在Amazon上评论:“如果需要复习C++知识技能的话,这本书是首选”。足见其生命力之强。
本书作者是畅销图书《C++ Primer (3RD)中文版》的作者Stanley B. Lippman,其职业是提供关于C++和面向对象的训练、咨询、设计和指导。2009年,他来上海参加C++大会,引发技术界一时轰动。
此次,我们将在英文原版的基础上,总结《代码质量》注释版的成功经验,对难点和要点加以注释,面向高等院校学生和专业人员市场销售。

图书特色

“通过阅读本书,你可以在很短的时间里熟悉和了解C++。Stanley成功地将复杂深厚的内容浓缩成基本的要素,让你可以学习到编写真正程序所需知道的一切。书中涉及大量非常实用的案例分析。”
—— Steve Vinoski,IONA

本书为那些没有太多时间学习的程序员提供了一条在工作中学习C++的捷径。它把重点放在那些C++编程中重要的要素上,并覆盖能够帮助解决实际编程问题的特性和技术。
本书将C++的基本内容按照过程风格、泛型风格、基于对象风格,以及面向对象风格进行组织。本书以复杂度渐进的风格展开,并在讨论解决方案的过程中引入语言特性,便于学习C++的功能和结构,同时理解其目的和基本理念。

本书主要内容
泛型编程和标准模板库(STL)
基于对象的编程和类的设计
面向对象的编程和类层次体系的设计
函数和类模板的设计和使用
异常处理和运行时类型信息(RTTI)
此外,附录A里还为每一章最后的习题给出了完整的答案和详细解释。附录B则是一本泛型算法的快速参考手册,解释了每个算法的使用方法并给出了示例。
这本精炼的教程提供了C++实战所必需的知识点,为进一步的学习打下坚实的基础。

作者简介
Stanley B. Lippman 是梦工厂动画公司核心技术小组的成员。在加入梦工厂之前,Stanley是迪斯尼动画公司的首席软件工程师。他在贝尔实验室期间领导过cfront 3.0版和2.1版编译器开发团队。他曾经是Bjarne Stroustrup领导下的贝尔实验室基金会项目的一员。Stanley著有广受欢迎的《C++ Primer》和《Inside the C++ Object Model》。他曾编辑由剑桥大学出版社出版的《C++ Gems》。他还是多部动画长片的制作成员,其中包括《巴黎圣母院》和《幻想曲2000》。

图书前言

好吧,这本书实在是非常薄。我的意思是,这太叫人意外了。我的《C++ Primer》算上索引、标题和感谢一共有1237页。而这本书才这么点儿—在拳击术语里,这算是“羽量级”的。
  那么第一个问题就是这到底是怎么回事呢?这里还真有一个故事可以讲。
  多年以来我一直在询问迪士尼动画里的每一个人,期望他们能参与到制作工作中来。我央求了很多导演和管理层人士—老实说,甚至连Mickey都有问过。我想其中的一部分原因是好莱坞以及大银幕的那种魔力。而另一方面则是我不但拥有计算机科学学位,同时还是艺术类的硕士,而制作电影对我个人来讲似乎是可以兼得的。不过我和管理人员说的是我需要一些实际的制作经验来提供有用的工具。身为一名编译器编写者,其实我就是自己最重要的用户之一。当连你自己也对自己的软件感到诸多不满的时候,就不会对那些批评感到抗拒和不公了。
  《狂想曲2000》里火鸟组曲的电脑特效指导对我能否加入他的团队颇有兴趣。不过作为一项考验,他要求我先编写一个工具来读取一个场景中迪士尼摄像机的原始资料,并生成一个可以插入到Houdini动画包中的摄像机节点。我用C++实现了这个工具。他们很满意,于是我就加入啦。
一进团队(感谢Jinko和Chyuan),他们就要我用Perl重写这个工具。因为其他的TD都不是职业程序员,他们只会用Perl、Tcl之类的语言。(TD是电影行业里的术语,指的是技术指导。我是部门的软件TD。我们还有一位灯光TD Mira、一位模型TD Tim和好几位电脑特效动画师Mike、Steve和Tonyal。)而且,我还得尽快把它搞完,因为我们要验证一些概念测试,因为导演Paul、Gaetan和特效总监Dave都等着把这个结果交给大老板Peter呢。别急,慢慢来,你懂我的意思的,不过……
  这就让我有点犯难了。要是用C++的话我对自己的编程速度还是很自信的。可是我不懂Perl啊。我想,好吧,既然这样我就找本书读一下。不过它不可以太厚了,至少现在不行,我没那么多时间。它最好不用告诉我太多细节,虽然我知道我应该理解所有的内容,不过以后再说吧。毕竟结果才是最重要的:导演需要的是验证概念,艺术家们需要的是可以用来证明概念的插件,而制片人—咳咳,她恨不得一天有48个小时。我不要最好的Perl经典—只要一份能够正确引领我前进,同时不要过分偏离正轨的教程就行了。
  我选的是Randal Schwartz的《Learning Perl》。它让我能着手开始工作,而且我要说这本书非常好读。嗯……好吧,任何电脑书都很好读的。它省略了很多重要的东西,不过那个时侯我也不需要了解所有的东西—我只要让我的Perl脚本能运行就可以了。
  最终这让我很遗憾地意识到对任何希望学习C++的人来说,《C++ Primer》第3版没有办法负担起类似的角色。它已经变得太庞大了。虽然我觉得它是一本好书—特别是在第3版里请到Jos巈 Lajoie来合著以后。不过对于这种快速学习C++语言的要求来说,这本书太过繁复了。这就是我决定编写本书的原因。
  你可能会想,可是C++不是Perl啊。没错。可是本书也不是《Learning Perl》。它讲的是如何学习C++。真正的问题在于,怎样在删掉将近一千页之后仍然能自称是有价值的教科书呢?
  1) 细节程度。在计算机图形学里,细节程度指的是一幅图像渲染的尖锐程度。屏幕左上角骑在马背上的匈奴人需要能看清眼睛头发的脸、五点钟方向的阴影,以及服饰等细节。而远在后面的匈奴人就不需要关心这种程度的细节了。同样,本书的细节程度也将大幅降低。在我看来,《C++ Primer》在运算符重载上的讨论是目前为止最详细的,可读性也是最强的(我这么说不是自卖自夸,这一节的内容是Jos巈写的)。但是它花去了整整46页的篇幅来讨论和举例。这里我只用了两页而已。
  2) 语言核心。在《C++ Report》担任编辑的时候,我曾经说过这样一句话,杂志编辑有一半的时间都花在决定哪些内容是要删掉的。本书也是一样。这本书的内容围绕一系列的编程问题展开。并在解决问题的过程中不断引入语言特性。我没有需要动用多重继承或者虚拟继承才能解决的问题,所以这里就不会讨论它们了。不过为了实现迭代器类,我必须引入嵌套类型。类转换操作符很容易被误用,解释起来也相当复杂。所以我决定不在这里讨论它们。这样的例子还有很多。展示语言特性的选择和顺序都是可以批评的。这是我的选择,同时也是我的责任。
  3) 范例数量。《C++ Primer》里包含了几百页详细讲解的范例,包括一个面向对象的文本查询系统和将近半打完整实现的类。虽然本书同样也是围绕代码展开的,但是范例的数量远不及《C++ Primer》的丰富。为了弥补这一点,附录A里提供了所有程序习题的答案。就像我的编辑Deborah Lafferty说的:“如果你想教得快一点,唾手可得的答案对于强化学习是很有帮助的。”
本书的结构
  本书包含了七章和两个附录。第1章通过编写一个小型的交互程序,给出了预定义语言的描述。它涵盖的内容有内建数据类型、预定义操作符、vector和string类、条件和循环语句,以及负责输入输出的iostream库。我在这一章里引入vector和string类是因为我强烈建议读者使用它们而不是内建数组或是C风格的字符串。
  第2章解释了如何设计和使用函数,并介绍了C++里函数的各种风格:内联函数、重载函数、模板函数,以及指向函数的指针。
  第3章涵盖了所谓的标准模板库(STL):一组容器类,例如vector、list、set和map,以及作用于那些容器上的泛型算法,例如sort()、copy()和merge()。附录B按照字母顺序列出了最常用的泛型算法并就如何使用给出了范例。
  身为一名C++程序员,你的主要工作就是编写类以及面向对象的类层次体系。第4章介绍了C++类机制的设计和使用,它让你能创建针对应用程序领域的数据类型。例如我在梦工厂担任咨询工作的时候,我们就设计了可以进行四通道图像合成等工作的类。第5章解释了如何扩展类的设计,在面向对象的类层次体系里支持一系列相关的类。例如,我们通过继承和动态绑定定义了一个合成所需的层次体系,而不是八个各自孤立的图像合成类。
  类模板是第6章的主题。类模板是一种对类的描述,它允许你参数化一个或多个类型或者值。例如vector类就可以参数化它要包含的元素类型。而buffer类则不但可以参数化其元素类型,还可以参数化它的大小。这一章将围绕一个二叉树模板类的实现展开。
  最后,第7章展示了如何使用C++的异常处理机制以及如何让它融入到现有的标准库异常体系中去。附录A给出了编程习题的答案。而附录B则为最常见的泛型算法提供了代码范例和讨论。
关于源代码
  本书给出的完整源代码以及习题答案都可以在Addison Wesley Longman的网站(http://www.informit.com/store/product.aspx isbn=0201485184)上下载。所有的代码都在Visual C++ 5.0(Intel C++编译器)和Visual C++ 6.0(微软C++编译器)下通过测试。你在自己的系统上编译的时候可能会需要稍微做一点修改。如果是这样,请把你做的修改发给我(slippman@objectwrite.com),我会把它们和你的名字一起加在答案代码里。(注意本书并没有展示完整的源代码。)
感谢
  这里要特别感谢《C++ Primer》第3版的合作者Jos巈 Lajoie。一直以来她都给予了极大的支持,不仅是因为她对本书草稿所给出的深刻评注,更是因为她毫无保留的鼓励。同时我还要特别感谢Dave Slayton,他以一支尖锐的绿色铅笔审阅了本书的全部内容和代码范例,以及Steve Vinoski对本书草稿极富爱心但又坚决的批评。
  特别感谢Addison-Wesley的编辑团队:编辑Deborah Lafferty从一开始就支持着这个项目,审稿编辑Betsy Hardinger对本书的可读性作出了相当大的贡献,而产品经理John Fuller则领导我们把手稿变成装订成册的书本。
  在撰写此书的过程中,我还有一些独立咨询顾问的工作,同时肩负《Essential C++》和一些能够(合理)体谅我的客户。所以我要感谢Colin Lipworth、Edwin Leonard以及Kenneth Meyer的耐心和信赖。
寻找更多的信息
  这里我要厚着脸皮地说,介绍C++语言最好的两本书分别是Lippman和Lajoie合著的《C++ Primer》以及Stroustrup的《The C++ Programming Language》,两本书都有第3版。在本书中我会就更深入的主题向你推荐它们来阅读。下面是本书中引用到的书目。(更详细的参考资料可以在《C++ Primer》和《The C++ Programming Language》里找到。)
排版约定
  本书的文字字体设为10.5 pt. Palatino。程序文字和语言关键字则设为8.5 pt. lucida。函数定义为它们的名字加上C++函数调用操作符(())。因此,foo表示的是一个程序对象,而bar()表示的就是一个程序函数了。类名的字体也同样设为Palatino。

上架指导

计算机\程序设计

封底文字

“通过阅读本书,你可以在很短的时间里熟悉和了解C++。Stan成功地将复杂深厚的内容浓缩成基本的要素,让你可以学习到编写真正程序所需知道的一切。书中涉及大量非常实用的案例分析。”
——Steve Vinoski,IONA
本书为那些没有太多时间学习的程序员提供了一条在工作中学习C++的捷径。它把重点放在那些C++编程中重要的要素上,并覆盖能够帮助解决实际编程问题的特性和技术。
本书将C++的基本内容按照过程风格、泛型风格、基于对象风格,以及面向对象风格进行组织。本书采用复杂度渐进的风格展开,并在讨论解决方案的过程中引入语言特性,便于学习C++的功能和结构,同时理解其目的和基本理念。
书中完整深入探讨了以下主要内容:
泛型编程和标准模板库(STL)
基于对象的编程和类的设计
面向对象的编程和类层次体系的设计
函数和类模板的设计和使用
异常处理和运行时类型信息(RTTI)
此外,附录A里还为每一章最后的习题给出了完整的答案和详细解释。附录B则是一本泛型算法的快速参考手册,解释了每个算法的使用方法并给出了示例。
这本精炼的教程提供了C++实战所必需的知识点,为你进一步的学习打下坚实的基础。

图书序言

本书是Stanley继《C++ Primer》后的又一本经典著作。它的定位和《C++ Primer》颇为不同,《C++ Primer》是一本巨细靡遗的教科书,而《Essential C++》的目的是为了让你能够迅速了解C++这门语言以便展开工作,所以一切都是从实际出发,讲求的是效率。
  注解一本书,特别是这样一本精简版教程的难点就在于取舍和细节程度(Stanley自己也在前言里提到了这两点),书中剔除了很多C++的高级特性,也回避了很多细节内容。因此我们也要时刻提醒自己这些高阶内容不属于本书的范畴,不应该在书中提到它们。在讲解的时候,书中主要关注的地方是语言的“正确”用法,而C++的灵活性又导致了实际工作中存在很多不那么“正规”的用法,这是我们在注解里用笔墨较多的一个方面,主要是提醒你这里有陷阱,那么写会有什么效果等。另外由于C和C++之间千丝万缕的关系,在碰到遗留代码的时候,往往会看到很多C风格或者是“传统”C++风格的代码,这些则是注解关注的另一个方面。最后就是一些扩展内容,遵循本书的原则,我们也不做过多的展开,只是列出了可以参考的读物,让有兴趣的读者能自行查阅。
  在注解过程中,我们查阅了很多其他书籍,并在相关的知识点上给出了参考读物。在此要感谢这些好书的作者们,是他们让我们的工作轻松了不少。
  最后,感谢机械工业出版社华章分社编辑的支持和辛劳,让我们可以看到一本又一本的好书。
徐旭铭

作者简介

(美) Stanley B. Lippman  著:Stanley B. Lippman 是梦工厂动画公司核心技术小组的成员。在加入梦工厂之前,Stan是迪斯尼动画公司的首席软件工程师。他在贝尔实验室期间领导过cfront 3.0版和2.1版编译器开发团队。他曾经是Bjarne Stroustrup领导下的贝尔实验室基金会项目的一员。Stan著有广受欢迎的《C++ Primer》和《Inside the C++ Object Modle》。他曾编辑由剑桥大学出版社出版的《C++ Gem》。他还是多部动画长片的制作成员,其中包括《巴黎圣母院》和《幻想曲2000》。

译者简介

徐旭铭 金萍华 注释:暂无简介

图书目录

教学资源推荐
作者: [加拿大] 马丁·P.罗毕拉德(Martin P. Robillard) 著
作者: (美)Al Kelley,Ira Pohl
作者: 化志章 揭安全 钟林辉 编著
参考读物推荐
作者: (美)Eric Rochester 著
作者: [美] 米奇·麦卡弗里(Mitch McCaffrey) 著
作者: (澳)Quinton Anderson 著