五刷 3000 册 (2004/12/13)
四刷 6000 册 (2002/09/ )
三刷 6000 册 (2002/01/12)
二刷 6000 册 (2001/09/28)
一刷 10000 册 (2001/08/25)

出版简讯 / 华中科技大学出版社计算机编辑室暨市场部
亲爱的读者朋友:您好
C++初学者有福了
由闻名于世的C++大师级作家Stanley B.Lippman 精心撰写,由台湾着名IT技术作家侯捷先生倾力翻译的一本C++入门好书《Essential C++ 中文版》2001年8月由华中科技大学出版社正式出版时间。第一次印刷的10000册书不到一个半月即供不应求,9月进行了第二次印刷,三个月即告售罄。目前,我们根据侯捷网站上的勘误表进行了认真修改,再次重印6000册,预计春节前可以发往全国各地。本书采用国际16开本,300页,封面为进口250克铜版纸加勒口,覆光膜,内芯为白度很好的70克江苏高级双胶纸。封面贴有华中科技大学出版社(原华中理工大学出版社)的激光防伪商标,封底贴有Pearson Education公司提供的激光防伪商标(商标上的文字为 "Pearson Education")。书脊上则印有Addison Wesley 公司的名字和徽标。
定价:39.80元/册。
本书在全国的首发书店(包括网上书店)名称和电话均公布在侯捷网站。如有疑问,欢迎发来邮件或到如下网址留言:
junzhou@public.wh.hb.cn
http://yeka52.yeah.net
http://yeka.xilubbs.com (好书 你说,我说)
华储网上电脑书店是我们在网上的重要经销商,他们服务周到 及时 准确,因此,我们敬向广大中小城市和农村中买书不方便的读者郑重推荐华储网上电脑书店(http://www.huachu.com.cn)。
华中科技大学出版社市场部暨计算机编辑室敬上
附:本书在全国各大城市首发的书店和网站如下:
沈阳:辽宁华储资讯科技有限责任公司 024-83892148
华储网上电脑书店(www.huachu.com.cn)
北京:海淀图书城昊海楼电子科技书店 010-62534720,62534721
西单图书大厦 010-66078518
CSDN网站暨《程序员》杂志社 64993616-270
上海:新风雨网络书城(www.cnforyou.com)021-36033538
中国科技图书公司 021-63234567
上海交大昂立科技有限公司 32032812,32032811
武汉:武汉电子科技书店 87879661
武汉市洪山科技图书发行有限公司 87881657
华中科技大学出版社读者服务部 87544529
广州:广州天河天鼎科技图书有限公司(简称天鼎书店) 020-87506587
广州金地科技有限公司 020-87782496 8765409
深圳:深圳市科技书店 3634184, 3634189
深圳大学教材服务中心 6537102, 6534105
天津:天津计算机书店(天津市柏特商贸有限公司) 28365950,27830190
天津市南开区文友书店 022-27402942
西安:西安天意图书发行有限公司 7441380
陕西省外文书店图书音像批销中心 029-7279886
成都:成都市都乐科技图书有限公司 3335219
成都教育考试书店 028-5410792
重庆:重庆新华书店(集团)有限责任公司 68428344
重庆交通学院学生工作部 7781659
南京:南京科海科技书店 025-3328998
南京市新华书店 (025)6642336
杭州:浙江大学科海电子技术公司 0571-7951140
杭州蓝晶电子技术开发有限公司 0571-8805813
长沙:长沙科技书店 2237168
博源图书有限公司 0731-4424450
合肥:安徽春秋书社科技图书发行服务部 0551-3661104
合肥市新时代电脑科技书店 0551-3667678
哈尔滨:哈尔滨金北方科技开发有限公司 6415498,6412070
哈尔滨市学府书店 0451-6608030 6674514
郑州:郑州金宇科技书店 3942742(13503995165
郑州电子科技书店 0371-6251394
福州:福建省福州市新华书店 0591-7528487
厦门:厦门对外图书交流中心 0592-5054027
大连:大连理工大学出版社教育书店 0411-4708970
济南:济南泉城科技图书发行有限公司 0531-6950876 699199
山东智能人科技书店 0531-8934878-3
太原:山西春雨实有限公司 0351-4122793
兰州:兰州七里河计算机书店 0931-2311243 8840555
如果您对本书有出版上的意见和建议,请您给编辑来信:
junzhou@public.wh.hb.cn
感谢您对我们的鼓励和支持,我们会更加努力。紧握您的手
华中科技大学出版社计算机编辑室暨市场部敬上(2001年8月5日)
满汉全席之外(译序/侯捷)
Stanley B. Lippman 所着的 C++ Primer 雄踞书坛历久不衰,堪称 C++ 最佳教本。但是走过 10 个年头之後,继 1237 页的 C++ Primer 第三版,Lippman 又返朴归真地写了这本 276 页的Essential C++。有了满汉全席,为何还眷顾清粥小菜?完成了伟大的巨着,何必回头再写这麽一本轻薄短小的初学者用书呢?
所有知道 Lippman 和 C++ Primer 的人,脸上都浮现相同的问号。
轻薄短小并不是判断适合初学与否的依据。Lippman 写过Inside the C++ Object Model,280 页小开本,崩掉多少C++ 老手的牙齿。本书之所以号称适合初学者,不在於轻薄短小,在於素材的选择与组织的安排。
关於 Lippman 重作冯妇的故事,他自己在前言(p.ix)中有详细的介绍。他的转折,他的选择,他的职责,乃至於这本书的纲要和组织,前言中都有详细的交待。这方面我不必再置一词。
身为C++ Primer (3/e) 的译者,以及多本进阶书籍的作者,我必须努力说服自己,才能心甘情愿地将精力与时间用来重复过去的足迹。然而,如果连 Lippman 都愿意为初学者再铺一条红地毯,我也愿意为初学者停留一下我的脚步。
* * * * * * * * * * * * * * * * * * * *
我是一名资讯教育工作者,写译书籍,培训业界人员,主持网站回应读者与学员,并於大学开课。我真正第一线面对大量学习者。藉此机会我要表达的是,所谓「初学者」实在是个过於笼统的名词与分类(呃,谈得上分类吗)。一般所谓「初学者」,多半想像是大一或专一新生程度。其实 C++ 语言存在各种「初学者」,有 13 岁的,有 31 岁的(当然也有 41 岁的)。只要是第一次接触这个语言,就是这个语言的初学者,他可能才初次接触电脑,可能浸淫Pascal/C 语言 10 年之久,或可能已有 Smalltalk/Java 三年经验。有人连电脑基本概念都没有,有人已经是经验丰富的软体工程师。这些人面对 C++,学习速度、教材需求、各人领悟,相同吗?
大不同矣!
每个人都以自己的方式来诠释「初学者」这个字眼,并不经意地反映出自己的足迹。初学者有很多很多种,「初学者」一词却无法反映他们的真实状态。
* * * * * * * * * * * * * * * * * * * *
固然,轻薄短小的书籍乍见之下让所有读者心情轻松,但如果舍弃太多应该深入的地方不谈,也难免令人行止失据,进退两难。这本小书可以是你的起点,但绝不能够是你的终站。
做为一本优秀教本,轻薄短小不是重点,素材的选择与组织的安排,表达的精准与阅读的顺畅,才是重点。
做为一个好的学习者,背景不是重点,重要的是,你是否具备正确的学习态度。起步固然可从轻松小品开始,但如果碰上大部头巨着就退避三舍逃之 ,面对任何技术只求速食速成,学语言却从来不写程式,那就绝对没有成为高手乃至专家的一天。
有些人的学习,自练一身铜筋铁骨,可以在热带丛林中披荆斩棘,在莽莽草原中追奔逐北。有些人的学习,既未习惯大部头书,也未习惯严谨格调,更未习惯自修勤学,是温室里的一朵花,没有自立自强的本钱。
* * * * * * * * * * * * * * * * * * * * *
章节的安排,篇幅的份量,索引的保留,习题和解答,网上的服务,都使这本小书成为自修妙品,或C++ 专业课程的适当教材。我诚挚希望《Essential C++ 中文版》的完成,帮助更多人从中获得 C++ 的学习乐趣 - 噢,是的,物件导向程式语言可以带给你很多乐趣,我不骗你。
侯捷 2001/07/18
jjhou@jjhou.com
http://www.jjhou.com(繁体),
http://www.csdn.net/expert/jjhou(简体)
本书(简体版)系以繁体版为基础,由王凯、孟岩两位先生转译为简体,合力修润,并将书中术语改为大陆习惯用语。整个制作过程中,侯捷、王凯、孟岩、以及责任编辑周筠女士,经过多次的检阅与讨论。我们所盼望呈现的,是符合内地阅读习惯的一本读物。然而以下术语,根据我个人长期在科技实业界、教育界、写译界的经验,决定保留繁体版译法:
英文术语 大陆惯用译法 本书译法 adapter 适配器 配接器 argument 实叁(实质叁数) 引数 by reference 传叁考,传地址 传址 by value 传值 传值 dereference 反引用,解叁考 提领 evaluate 评估,计算 评估, 核定 instance 案例,实例 实体 library 库,函数库 程序库 range 范围 区间(使用於STL时) resolve 解析 决议 parameter 形叁(形式叁数) 叁数 type 类型 型别
以上都是基於我个人对术语实际意义的理解、术语译词的选择理念(独特而不易混淆)、以及文字精美的考量(尽量使用二字词)等等,所做的决定。术语的选用,无法令每个人满意,这种情况两岸皆同。在此特别提醒您注意以上用法。
本书繁体版由王建兴先生担任初译工作,并同挂译者之名。由於建兴未涉及简体版的制作,所以未列名於简体版封面。但我仍要在此感谢建兴的贡献。同时,我更要感谢王凯、孟岩、周筠三位先生女士的努力。一本书籍的英译中,繁转简,有很多很多专业技术的、行文遣字的、庶务性的工作在其中。我们都希望将书籍做到完美,但人世间没有完美。请上本书支援网站(载於封底)观看後续的讨论、勘误、程式范例。
请注意:
1. 侯捷网站上所列之繁体版勘误表(依日期排列),其中2001/07/18前的错误皆已於简体版修正完毕。本简体版另有独立之勘误表。
2. 本书与英文版页页对译,俾得以保留原书索引。
3. 本书附加中英术语对照表於附录 C。
4. 本书已依英文版第一刷(1st printing)勘误表加以修正
5. 本书源码(source code)可自侯捷网站下载。
侯捷网站:
http://www.jjhou.com(繁体)
http://www.csdn.net/expert/jjhou(简体)
前言 / Lippman
天啊,这本书竟是如此轻薄短小。我真想大叫一声哇欧!C++ Primer 加上索引、扉页、谢词之後,厚达 1237 页,而此书却薄薄只有 276 页。套句拳击术语,这是一本「羽量级」作品。
每个人都会好奇地想知道这究竟是怎麽回事。里头的确有一段故事。
过去数年来,我不断缠着华德迪士尼电影动画公司(Disney Feature Animation)的每一个人,要求让我亲身叁与一部电影的制作。我缠着导演,甚至Mickey 本人(如果我可以说出来的话),要求一份管理工作。我会如此疯狂,部份原因是深陷於好莱坞大萤幕那令人神往的无尽魔力而难以自拨。除了电脑科学方面的学位,我还拥有艺术硕士的头衔,而电影工作似乎可以为我带来个人专长的某种整合。我要求管理工作,为的是从制片过程中获取经验,以便提供实际有用的工具。身为一个 C++ 编译器撰写者,我一直都是自己最主要的用户之一。而你知道,当你是自己软体的主力抱怨者时,你就很难再为自己辩护或觉得受到不公平的责难。
狂想曲两千(Fantasia 2000)片中有一段火鸟(Firebird)特效镜头。其电脑特效指导对於我的加盟颇感兴趣。不过,为了掂掂我的斤两,他要求我先写个工具,读入为某段场景所摄的原始资料,再由此产生可嵌入 Houdini 动画套件中的摄影机节点(camera node)。我当然用 C++ 顺利把它搞定。他们爱死它了,我也因此得到了我梦寐以求的工作。
有一次,在制片过程中(在此特别感谢 Jinko 和 Chyuan),我被要求以 Perl 重写那个工具。其它的 TDs 并非编程高手,仅仅知道 Perl、Tcl 之类的程式语言。(TD 是电影工业中的术语,指的是技术导演。我是这部片子的软体 TD,我们还有一位灯光 TD [嗨 Mira],一位模型 TD [嗨 Tim],以及电影特效动画师 [嗨 Mike, Steve, Tonya]。)而且,喔,天啊,我得赶着点,因为我们想要获得一些观念上的实证,而导演(嗨 Paul 和 Gaetan)及特效总监(嗨 Dave)正等着这个结果,准备呈给公司大头目(嗨 Peter)。这虽然不是什麽紧急要务,可是,你知道的┅,唉。
这令我感到些许为难。我可以自信满满地以 C++ 快速完成,但我不懂 Perl。好吧,我想,我去找本书抱抱佛脚好了 - 前提是这本书不能太厚,起码此刻不能太厚。而且它最好不要告诉我太多东西,虽然我知道我应该知道每一样东西,不过暂且等等吧。毕竟这只是一场表演:导演们需要一些经过证实的概念,艺术家需要一些东西协助证实其概念,而制片(嗨 heck),她需要的是一天 48 小时。此刻我不需要全世界最棒的 Perl 大全,我需要的是一本能妥善引导我前进,并使我不致偏离正轨过远的小书。
我找到了 Randal Schwartz 的 Learning Perl,它让我立即上手并进展神速,而且颇具阅读趣味。不过,就像其它有趣的电脑书籍一样,它也略去了不少值得一读的内容 - 虽然在那个时间点,我并不需要了解所有内容,我只需要让我的 Perl 程式乖乖动起来。
我终於在感伤的心境中明白,C++ Primer 第三版其实无法扮演人们在初学 C++ 时的导师角色。它太庞大了。当然我还是认为它是一本让我骄傲的巨着 - 特别是由於邀请到 Josee Lajoie 共同完成。但是,对於想立刻学会 C++ 程式语言的人来说,这本巨着实在过於庞大复杂。这正是我动手撰写Essential C++ 的原因。
你或许会想,C++ 又不是 Perl。完全正确!本书也非 Learning Perl,它谈的是如何学习 C++。真正的问题在於,谁能够在散尽千页篇幅之後,犹敢自称教导了所有的东西呢?
1. 精细度。在电脑绘图领域中,精细度指的是影像被描绘出来的鲜明程度。画面左上角那位骑在马背上的匈奴人,需要一张看得清楚眼睛的脸、头发、五点钟方向的影子、衣服┅。匈奴人的背後 - 不,不是那块岩石,老天 - 唔,相较之下无关紧要。因此我们不会以相同的精细度来描绘这两个影像。同样道理,本书的精细度调降了相当程度。依我看,C++ Primer 除了在运算子多载化(operator overloading)方面的实例讨论稍嫌不足之外,可说极其完备了(我敢这麽说是因为 Josee 也有一份功劳)。但尽管如此,C++ Primer 还花了 46 页篇幅加以讨论,并附上范例,而这本书却仅以 2 页带过。
2. 语言核心。当我还是 C++ Report 的编辑时,我常说,杂志编辑有一半工作花在决定哪些题材应该放入,哪些不要。这句话对本书一样成立。本书内容环绕在程式设计过程中所发生的一系列问题。我介绍程式语言本身的特性,藉此来为不同的问题提供解决之道。书中并未述及任何一个多重继承或虚拟继承可解决的问题,所以我也就完全没有讨论这两个主题。然而,为了实作一个 iterator class,我必须引入巢状型别(nested types)。Class 的型别转换运算子很容易被错用,解释起来也很复杂,所以我不打算在书中提到它。诸如此类。我对题材的选择以及对语言特性的呈现顺序,欢迎大家指教批评。这是我的选择,也是我的职责。
3. 范例的数量。C++ Primer 有数百页程式码,巨细糜遗,其中甚至包括一套物件导向的文本检索系统,以及近十个左右的完整 classes。虽然本书也有程式码,但数量远不及 C++ Primer。为了弭补这项缺憾,我将所有习题解答都置於附录A。诚如我的编辑 Deborah Lafferty 所言,『如果你想提高教学速度,唾手可得的解答对於学习的强化,极有助益。』
本书的结构与组织
本书由七章和两份附录构成。第一章藉着撰写一个具有互动性质的小程式,描绘 C++ 语言预先定义的部份。这一章涵盖了内建的资料型别、语言预先定义好的运算子(operators)、标准程式库中的 vector 和 string 类别、条件述句和回圈述句、输入和输出用的 iostream 程式库。我之所以在本章介绍 vector和string两个 classes,因为我想鼓励读者多多利用它们取代语言内建的阵列和C-style 字串。
第二章解释函式的设计与使用,并针对 C++ 函式的多种不同风貌一一检视,包括 inline 函式、多载化(overloaded)函式、function template,以及函式指标(pointers to functions)。
第三章涵盖所谓的 Standard Template Library(STL):一组容器类别(包括 vector, list, set, map 等等)、一组作用於容器身上的泛型演算法(包括 sort(), copy(), merge() 等等)。附录B依字典顺序列出最常被广泛使用的泛型演算法,并逐一附上使用实例。
身为一个 C++ 程式员,你的主要任务便是提交 classes 以及物件导向的classes 阶层体系。第四章带领你亲身走访 classes 机制的设计与使用过程。在这个过程中,你会看到如何为自身的应用系统建立起专属的资料型别。第五章说明如何扩展 classes,使多个相关的 classes 形成族系,支援物件导向的 classes 阶层体系。以我在梦工厂动画电影公司(Dreamworks Animation)担任顾问的经验为例,那时候我们设计了一些 classes,用来进行四个频道影像合成之类的工作。我们使用继承和动态系结(dynamic binding)技术,定义影像合成所需的 classes 阶层体系,而不只是设计八个相互独立的 classes。
第六章的重头戏是 class templates,那是建立 class 时的一种先行描述,让我们得以将 class 用到的一个(或多个)资料型别或资料值,抽离并叁数化。以 vector 为例,可能需要将其元素的型别加以叁数化。buffer 的设计不仅得将元素型别叁数化,亦得将其缓冲区容量叁数化。本章的行进路线围绕在二元树(binary tree)class template 实作上。
最後一章,第七章,说明如何使用 C++ 提供的异常处理机制(exception handling facility),并示范如何将它融入标准程式库所定义的异常体系中。附录A是本书习题解答。附录B 提供最被广泛运用的一些泛型演算法的相关讨论与使用实例。
关於原始码
本书的所有程式,以及习题解答中的完整程式码,皆可线上取得。你可以在 Addison Wesley Longman 的网站(www.awl.com/cseng/titles/0-201-48518-4)或我的个人首页(www.objectwrite.com)中取得。所有程式皆在 Visual C++ 5.0 环境中以 Intel C++ 编译器测试过,并且也在 Visual C++ 6.0 环境中以 Microsoft C++ 编译器测试过。你或许需要稍微修改程式码,才能在自己的系统上编译成功。如果你需要做任何修改并且也做了,请将修改结果寄一份给我(slippman@objectwrite.com),我会将它们附上你的大名,附於习题解答程式码中。注意,本书并未显示所有程式码。
致谢
在这里我要特别感谢 C++ Primer 第三版的共同作者 Josee Lajoie。不仅因为她为本书初稿提供了许多深入见解,更因为她在背後不断地带给我鼓舞。我也要特别感谢 Dave Slayton 以他那犀利的绿色铅笔,彻底检视了文本内容与程式范例。Steve Vinoski 则以同情但坚决的口吻,为本书初稿提供了许多宝贵意见。
特别感谢 Addison-Wesley 编辑小组:Deborah Lafferty,本书编辑,从头到尾支援这个案子;Besty Hardinger,审稿编辑,对本书文字的可读性贡献最大。John Fuller,产品经理,带领我们把一堆文稿化为一本完整的书册。
撰写本书的过程中,我同时还担任独立顾问工作,必须兼顾 Essential C++ 和客户之间的事务。感谢我的客户对我如此地体谅和宽容。我要感谢 Colin Lipworth, Edwin Leonard, Kenneth Meyer,因为你们的耐心与信赖,本书才得以完成。
更多资讯
内举不避亲,我要推荐 C++ 书籍中最好的两本,那便是 Lippman 与 Lajoie 合着的 C++ Primer,以及 Stroustrup 着的 The C++ Programming Language。两书目前皆为第三版。我会在本书各主题内提供其他更深入的叁考书目。以下便是本书的叁考书目。(你可以在 C++ Primer 和 The C++ Programming Language找到更广泛的叁考文献)
[LIPPMAN98] Lippman, Stanley and Josee Lajoie, C++ Primer, 3rd Editoin, Addison Wesley Longman, Inc., Reading, MA (1998) ISBN 0-201-82470-1.
[LIPPMAN96a] Lippman, Stanley, Inside the C++ Object Model, Addison Wesley Longman, Inc., Reading, MA (1996) ISBN 0-201-83454-5.
[LIPPMAN96b] Lippman, Stanley, Editor, C++ Gems, a SIGS Books imprint, Cambridge University Press, Cambridge, England (1996) ISBN 0-13570581-9.
[STROUSTRUP97] Stroustrup, Bjarne, The C++ Programming Language, 3rd Editoin, Addison Wesley Longman, Inc., Reading, MA (1997) ISBN 0-201-88954-4.
[SUTTER99] Sutter, Herb, Exceptional C++, Addison Wesley Longman, Inc., Reading, MA (2000) ISBN 0-201-61562-2.
字形习惯(英文版)
本书文字字型为 10.5 pt Palatino。程式码和语言关键字为 8.5 pt lucida。书中出现的识别字如果後面紧接着 C++ 的 function call 运算子(也就是一对小括号 ()),即代表某个函式名称。因此,foo 代表程式中的某个物件,bar() 代表程式中的函式。各个 classes 的名称以 Palatino 字形呈现。
译注:繁体中文版的排版方式是:内文中的一般英文字为 9 pt Times New Roman。程式码和语言关键字为 8 pt Courier New。各个 classes 的名称亦为 8 pt Courier New。异常类别(exception classes)以 8 pt Lucida Sans 呈现。英文长术语(例如 template parameter list, by reference, exception safe)采用 8 pt Arial。运算子名称采用 9 pt Footlight MT Light。
目录
本书繁体版目录请见 目录 (PDF)
封底
本书繁体版封底请见 封底文案 (PDF)