基本信息
- 原书名:Problem Solving with C++, 7th Edition
- 原出版社: Addison Wesley
编辑推荐
源远流长,长销十余年的入门经典
本书历史悠久,在国内外已具有相当高的知名度,是深受师生好评的C++入门经典教材,在国内有近50多所高校采用,更有大量读者用作自学教材,倍受读者青睐和期待
本书第4版,读者好评,请查看
本书第5版,读者好评,请查看
本书第6版,读者好评,请查看,本版被评为“中国大学出版社图书奖首届优秀教材奖”
内容简介
计算机书籍
本书是最优秀的C++入门教材,深受师生欢迎。作者结合自己多年的教学经验,根据教学大纲精心设计并编写了书中内容。与此同时,还采用了很多便于读者巩固所学知识的教学特征,比如各章开始处的小节总览,书中随处可见的总结框、编程提示和编程陷阱,各章结尾处的小结、习题和编程项目等。这些非常适合初学者掌握重要的编程概念。
全书共18章,6个附录。在讲解C++基础知识之后,直接引导学生深入函数、I/O流、类、控制流程、命名空间、数组、字符串、指针和动态数组、递归、模板、指针和链表、派生类、异常以及标准模板库。
Walter Savitch教授的C++入门经典教材
结构严谨、清晰,行文诙谐幽默,妙趣横生
80+技巧提示,30+生动有趣的编程实例
60+精彩视频,410+自测题,220+编程项目
作译者
目录
第2章 C++基础知识
第3章 更多的控制流程
第4章 过程抽象和返回一个值的函数
第5章 所有子任务的函数
第6章 I/O流——对象和类入门
第7章 数组
第8章 字符串和向量
第9章 指针和动态数组
第10章 定义类
第11章 类中的友元函数、重载操作符和数组
第12章 独立编译和命名空间
第13章 指针和链表
第14章 递归
第15章 继承
第16章 异常处理
第17章 模板
第18章 标准模板库
附录1 C++关键字
附录2 操作符的优先级
译者序
最近在看《罗素回忆录:来自记忆的肖像》,罗素的行文向来字字珠玑,具有很强的感染力,能够引起读者的共鸣,能够给读者很多启发。其中有一篇小文介绍他是如何写作的。他在文中讲到:“我希望用最少量的词便能够把每件事情说得一清二楚。我肯花时间设法找出最简洁的方式把某些事情毫不含糊地表达出来,为此,往往不惜牺牲追求美学上优点的一切企图。”在他21岁之前,希望自己的写作风格能够接近于约翰·米尔的风格,因为后者有值得他效仿的句型结构和拓展主题的方式。在经过过种种尝试之后,罗素终于醒悟,意识到对华丽词藻和张扬写作风格的模仿会诱发一定程度的虚伪性,认识到所有的模仿都是危险的,从而总结出一些简单的写作准则:
如果可以使用一个简单的词,就永远不要使用一个复杂的词;如果想要做一个包含大量必要条件在内的说明,那么尽量把这些必要条件分解到不同的句子中分别说明。
由此联想到我们的教材,一本优秀的教材,其表述方式和语言应该能够使大家都能明白,而不是充斥着只有少数博学之士才能看得懂的行话或者术语。
在这次翻译并修订Savitch老教授的《C++面向对象程序设计》的过程中,有颇多这样的感受。真正的大师,是不会一味追求形式化、科学化和精致化,使得专业知识与普通读者渐行渐远,直到彼此之间竖起不可逾越的篱笆。真正优秀的作者,不会是那些把普通读者也能明白的事情说得高深莫测,让大家云里雾里的。Savitch老先生的这本书让人感受到何为真正的大师,何为真正的优秀作者。这本书从1995年首次出版以来,经过十多年的考验,其通俗易懂、妙趣横生、与时俱进的特色,深受广大读者喜爱,被誉为“C++入门经典”,“C++入门教材的‘常青树’”。现在立足于IT行业的很多精英和骨干,很多都是在她的熏陶下成长起来的。本书目前已经修订到第7版,每次修订,都能增加新的特色,能体现时代的教学特征。
《C++面向对象程序设计》之所以畅销不衰,与她的特色是分不开的。
第一,她文风朴实,循序渐进,可读性强(对于一本面向C++初学者的书来说,这是最起码的要求),而不像某些作者的书,思维跳跃得很厉害,读起来很费劲。大家都知道,二战期间,丘吉尔的演讲和文章最受欢迎,其中一个重要因素就是他善于用普通老百姓也能懂的浅显语言来阐述自己的观点。Savitch老先生也是这样行文的。他考虑到广大读者的需求,广泛采用浅显易懂的语言来讲授C++编程知识。为保持这一特色,我在翻译过程中,也尽量如此。无论原著还是译本,宗旨都是循循善诱地引导一个完全不懂C++的人在短时间里充分熟悉并掌握C++编程技术。稍微翻阅几页正文,您就能充分体会到这个特点。
第二,本书完全符合标准。本书的示范程序不仅完全符合最新的ANSI/ISO C++标准,还遵循行业通行的编程风格,这便于读者在学习本书之后能够写出任何程序员都可以理解、任何编译器都能通过的程序。
第三,这个特色体现在本书的组织和结构上。时下流行的一个观点是,学习C++应该先从类学起。没问题,本书在创作时便充分考虑到了这一部分读者的要求。事实上,您可以按照自己喜欢的任何顺序来阅读各章的内容。这方面的详情可参考前言所提供的“依赖图”。由于这是一本真正的教科书,所以每章都提供了丰富的、重点突出的、非常有趣的自测题和编程项目。
第四,编程实例和编程项目贴近生活。文中30多个实例,来源于学生的生活圈,比如,信用卡余额、州收入所得税、购买比萨、温度换算、超市定价系统、回文测试、体重指数等,这些都能让我们体会到编程的乐趣。
第五,第7版新增了一些习题和视频讲解。借助于这60多个视频讲解,我们可以进一步了解解题思路,牢固掌握基础知识。
一本好书,凝聚着作者很多心血。一本好的译作又何尝不是呢?不仅要仔细揣摩作者的意思,还必须在不篡改作者本意的基础上用通俗易懂的文字表达出来。译本如原作,此为“信”;文字通达,令国人一目了然,此为“达”;提炼文字,使之有文学价值,此为“雅”。
计算机科学著作虽然不是文学作品,但随着读者水平的提高,也对“雅”提出了新的要求。人们之所以需要这方面的译本,不仅是为了快速消化和吸收国外的最新技术和观点,还为了满足自己的阅读需求。所以对于译本来说,“信”和“达”固然重要,但“雅”也必不可少。这三者之间的关系是:只有做到“信”,才有可能进一步追求“达”,进而实现“雅”。
为了确保正确性,我在翻译之余把书中的示范程序全部“跑”了一遍。根据我以前的经验,每本书都有这样或那样的错误,有的书错误之多,以至于最终还要出版数十页的勘误表。但是本书的测试结果令人惊叹,它的代码具有很高的正确性,这是一些同类教科书无法媲美的。与此同时,为保证正确性,我在翻译时除了参考网上公开的原书勘误,还和原作者进行了积极而卓有成效的沟通,对原著进行的所有改动都是经过授权的。这一过程有效确保了本书简体中文版的代码质量,使之达到了百分之百的正确率。
关于术语,本书简体中文版采用了业内通行的、国内程序员非常熟悉的词汇。基于翻译的本质,我的工作是让读者无障碍地阅读文档,并积极地跟上作者的思路。假如因为某个或者许多稀奇古怪的词而阻碍了阅读,那就是翻译工作的失败,这不是您我希望见到的。
本书第4版在国内出版以来,普遍受到读者的关注和欢迎。读者朋友们普遍反映喜欢此书的写作和翻译风格,喜欢穿插于全书的编程提示与陷阱,更喜欢书中难度不一的自测题和编程项目。有很多读者来信索取编程项目的答案。我也亲自做了部分有挑战性的编程项目,这的确是全书的特色和精华。由于这部分答案仅提供给教师,所以我建议大家发邮件到coo@netease.com申请,她们将为您提供帮助。
从第5版开始,教材特色更加明显。例如,在各章开篇处,提供了能引起读者关注的小节标题(即当前章的大纲),目的是让读者更清楚地理清脉络。新增一章内容专门介绍STL(标准模板库)。自第6版开始,基本沿用了第5版的大纲,修订了部分内容,对章节进行了更合理的调整。各章开始处提供了绕有趣味的引文。这些引文要么出自计算机业界大师,权威、有见地,要么出自名著,巧妙地用双关语把互不关联的两种含义结合起来,从而达到诙谐有趣的效果。针对这部分引文,我建议编辑保留英文。众所周知,有的东西翻译出来反而会失去原有的韵味,例如至今记忆犹新的高中英语中的一篇课文(节选):
Napoleon was astonished. “Either you are mad, or I am,” he declared.
“Both,sir!” cried the Swede proudly.
这里的“Both”一语双关,妙就妙在既指拿破仑和这位士兵都是疯子,又指这位战士参加过拿破仑指挥的两次战役。不过,也希望聆听大家的心声。如果您有兴趣,可以发邮件给我(transbot@vip.163.com),我将与大家一起分享心得。
前言
本书前几版的读者,请仔细阅读以下解释第7版修订内容的小节,前言的其余内容则可以跳过不看。但本书的新读者,务必仔细阅读前言的所有内容,以便把握本书的脉络。
第7版修订内容
第7版采用和第6版相同的编写体例,并保留了第6版的所有内容。新增了30个编程项目,并对几章原有的编程项目进行了改编。额外增加了有关map类的说明,而且示例程序进行了更新,以便同当今使用的大多数编译器兼容。此外,本书配套网站增加了39段视频,讨论了特定的主题以及编程项目的解决方案。这些视频可辅导学生完成解决问题和编写程序的过程,并有助于加强对关键编程概念的理解。如果书中的某个主题有对应的视频,就会出现一行特殊的注释(Video Note:……)。最后,根据授课教师的反馈,有关继承的介绍性材料从第6章“I/O流”移到了第10章“定义类”。然而,对于用过第6版的授课教师,可以继续沿用以前的教案,几乎不需要进行任何改动。
自主决定主题顺序
C++主题的大多数入门教科书都有一个非常详细的进度表,授课教师必须严格遵循。但本书不准备这样做。本书能适应授课教师的教学方式,而不是要求教师来适应本书。教师可以轻松地调整章节顺序,而不失连贯性。前言末尾的图P.1展示了本书所有主题的一幅“依赖图”,它描述了各个章节的多种教学顺序。另外,每章都包含一个“预备知识”小节,说明在学习当前章内容之前,必须先学习本书哪些部分的内容。这样一来,授课教师就可以轻松地重新安排各个章节的授课顺序。
虽然本书使用了库,并强调了库的重要性,但不要求任何非标准的库。本书只使用几乎所有C++实现都会提供的库。
类的介绍可灵活提前或推后
本书允许灵活地讲授类。授课教师可以根据需要提前或推迟讲类的主题。
本书的默认安排顺序是:首先向学生讲述变量声明、表达式求值、控制结构、过程抽象、函数定义、数组和指针处理的基本概念。这样一来,学生能牢固掌握编程概念,为后期掌握面向对象编程所涉及的复杂概念奠定坚实的基础。本书第2章~第9章介绍最基础的编程概念。第6章将用文件I/O流教学生如何使用类。由于流的I/O要求使用命名空间和类库,因此在前几章,还要介绍如何使用预定义的命名空间和由标准库提供的I/O类。在第10章,学生们将学习如何编写自己的类。
打算在课程前期就介绍类的授课教师,则可以重新安排各章的顺序以便适应自己的教学需求。这方面的细节将在下页的“主题可以灵活排序”一节介绍。一般而言,授课教师可以在完成第6章的教学后立即开始第10章“定义类”。
本书采用定量方式来传授类的知识。首先教学生写一些非常简单的类,接着添加构造函数,随后重载简单操作符,重载I/O操作符,依此类推。这种定量教学方式避免学生一开始就接触大量复杂的构造和概念。但是,本书的一个目标是让学生尽可能提早学会编写现实的类定义,而不是强迫他们花大量时间写一些故意简化的类。到第11章结束时,学生就能写出完整而实用的类,实现“类”的课程目标。
继承问题将在第10章进行简单的讲述,使学生能提前接触这一概念。但是,本书要到第15章才正式教学生写自己的派生类和使用虚函数。有的授课教师选择在中级课程中再讲述这方面的主题,另一些授课教师则可能想在入门课中就讨论继承问题。如果愿意,有关继承的主题也可推迟讲述,因为第16章~第18章不需要用到继承。
面向学生的易用性
一本书必须按恰当的顺序来讲解恰当的主题,这是最起码的要求。另外,在授课教师和其他有经验的程序员看来,书中的内容必须清晰而又正确,这是另一个最起码的要求。但是,是不是符合这两项要求的书都是好书呢?答案是否定的。书中的内容必须采取有利于初学者使用的方式来编排。在这本入门教科书中,我尽力让学生觉得清楚和友好。本书以前版本的大量学生反馈证明,这种写作风格确实使内容更清晰,能使学生充分享受到学习的乐趣。
ANSI/ISO C++标准
本书完全兼容于符合最新ANSI/ISO C++标准的编译器。
高级主题
许多“高级主题”都成为标准的CS1课程的一部分。即使它们不是课程的一部分,也最好以补充材料的形式随书提供。本书提供了大量高级主题,它们既可集成到一门课程中,也可作为自学主题。本书全面讲述了C++模板、继承(包括虚函数)、异常处理和STL(Standard Template Library,标准模板库)。
小结框
媒体评论
——Jennifer Perkins,阿肯色州立大学小石城分校
“Savitch的这本教材在我校已经使用多年,它赢得了我们师生的一致认同。Walter Savitch用清晰、简练的风格解释了难懂的编程概念,讨论了C++语言的所有重要特色。”
——Carol Roberts,缅因州立大学
“如果说写作是一种艺术的话,它便能催生出一个艺术家。Savitch的书就是这样的艺术。它以流畅、一致且轻松愉快的方式将C++编程知识娓娓道来。”
——Coskun Bayrak,阿肯色州立大学小石城分校
“从编程基础到面向对象概念,这样的安排符合逻辑,而且高效,能让刚涉足C++编程的学生理解类和一些更高级的主题。”
——Stephen Weissman,伯灵顿社区大学
“本书内容全面,涵盖C++语言的主要语法和算法的基础知识。它针对入门读者,深度合适,讲解细致入微、浅显易懂。在章节结构上,也为教师调整授课内容次序留有余地,便于不同的教师对内容进行裁减和重组。符合ANSI/ISO C++标准。在书中适时穿插自测题,方便自学读者及时复习巩固。适当地利用图示和源程序注释,便于自学读者理解。内容详略得当。虽然涵盖内容范围很广,但是针对入门读者的特点,将重点放在了C++语言的基础语法和程序设计的基本思想方面,对基础部分的讲解相对更细致。作为一本翻译教材,其中文表述很流畅,翻译的质量不错。可以看出译者在程序设计技术方面的造诣。总的说来,这是一本适合初学者的好书,尤其适合没有教师指导的自学读者。由于其内容次序灵活可调的特点,作为大学教材,对任课教师也很方便。”
——郑莉教授,清华大学