前 言
本书适合C++程序设计和计算机科学入门课程。不要求读者有任何编程经验,也不要求掌握除中学代数之外的其他任何数学知识。
本书前几版的读者请阅读关于第10版修订内容的小节,前言其余内容可略过。新读者请阅读前言的全部内容以把握本书脉络。
第10版修订内容
第10版采用和第9版相同的体例。保留第9版全部内容,但进行了以下修订。
* 统一采用camelCase拼写法,不再采用C风格的下划线连接。例如,set_name改为setName。
* 第10章讨论了浅拷贝和深拷贝。
* 第12章和第17章讨论了如何用头文件引入编译模板。
* 第18章讨论了C++11的std::array类、正则表达式、线程和智能指针。
* 进行了大量勘误和编辑,强调了文件I/O的首选方法,术语更规范,更好地定义了封装,并不再讨论已在C++11和更高版本中成为标准的一些东西。
* 新增10个编程项目。
* 新增5个视频讲解,总数达69个。这些视频讲解辅导学生解题和写程序,有助于巩固对关键编程概念的掌握。如书中某个主题有对应的视频讲解,就会出现一行特殊的注释(视频讲解:……)。
用过第9版的教师可沿用以前的教案,几乎不需要任何改动。
主题可以灵活排序
本书允许教师自由安排教学顺序。为了演示这一灵活性,下面推荐了两个额外的顺序。采用任何顺序都不会影响学习的连贯性。为了在改变顺序时确保这种连贯性,可能需要移动个别小节而不是全章。但只有较大的、位置便利的小节才需移动。为了帮助您根据需要自定义一个教学/阅读顺序,图P.1展示了一幅依赖图。另外,每章都有“预备知识”小节,解释学习那一章的每一节之前需掌握的内容。
重新排序1:提前学习类
为有效设计类,学生需要掌握一些基本工具,比如控制结构和函数定义。这些基础知识在第1章~第6章介绍。完成第6章后,学生就可开始写自己的类了。如果想提前学习类的相关知识,可像下面这样重新安排各章顺序。
* 基础知识 第1章~第6章。这6章全面介绍控制结构、函数定义和基本文件I/O。第3章介绍几种额外的控制结构,想提前学习类可考虑推迟这一章。
* 类和命名空间 第10章、第11章的11.1节和11.2节、第12章。这些章节全面介绍了如何定义类、友元、重载操作符和命名空间。
* 数组、字符串和向量 第7章和第8章。
* 指针和动态数组 第9章。
* 类中的数组 第11章的11.3节和11.4节。
* 继承 第15章。
* 递归 第14章(可推迟)。
* 指针和链表 第13章。
可能还要用到以下各章的部分内容。
* 异常处理 第16章。
* 模板 第17章。
* 标准模板库 第18章。
重新排序2:略微推迟类的学习
在“重新排序2”中,将先学完所有控制结构和数组的知识,然后才开始学习类。虽然对类的接触要比“重新排序1”晚,但还是比本书的默认顺序提前一些。
* 基础知识 第1章到第6章。这6章全面介绍了控制结构、函数定义和基本文件I/O。
* 数组和字符串 第7章、第8章的8.1节和8.2节。
* 类和命名空间 第10章、第11章的11.1节、11.2节和第12章。这些章节全面介绍了如何定义类、友元、重载操作符和命名空间。
* 指针和动态数组 第9章。
* 类中的数组 第11章的11.3节和11.4节。
* 继承 第15章。
* 递归 第14章(可推迟)。
* 向量 8.3节。
* 指针和链表 第13章。
可能还要用到以下各章的部分内容。
* 异常处理 第16章。
* 模板 第17章。
* 标准模板库 第18章。
面向学生的易用性
一本书必须按恰当的顺序来讲解恰当的主题,这是最起码的要求。另外,在老师和其他有经验的程序员看来,书的内容必须清晰而正确,这是另一个最起码的要求。但是不是符合这两项要求的书都是好书呢?答案是否定的。书中的内容必须采取有利于初学者使用的方式来编排。在这本入门教科书中,我尽力让学生觉得清楚和友好。本书以前版本的大量学生反馈证明,这种写作风格确实使内容更清晰,能使学生充分享受到学习的乐趣。
ANSI/ISO C++标准
本书可顺利使用符合最新ANSI/ISO C++标准的编译器。写作时最新标准是C++14。
高级主题
许多“高级主题”都已成为标准CS1课程的一部分。即使不是,以补充材料的形式提供也不错。本书提供大量高级主题,它们既可集成到课程中,也可作为自学主题。本书全面讲述了C++模板、继承(包括虚函数)、异常处理和STL(Standard Template Library,标准模板库)。虽然本书使用了库,而且教给学生库的重要性,但不要求任何非标准库。本书只用所有C++实现都有的库。
依赖图
下面的依赖图展示了各个章节可能的排序方式。连接两个框的实线表明上部的框必须先于下部的框完成。只要符合这个条件,采用任何阅读顺序都无损连贯性。如果一个框中包含小节编号,表明该框只代表那些小节,不代表全章。
小结框
每个要点都用一个有底纹的方框来小结,它们散布于各章。
自测题
每章都在重要位置提供大量自测题。答案在章末提供。
视频讲解
视频讲解(Video Note)旨在讲解关键编程概念和技术,演示了从设计到编码来解决问题的过程。视频讲解使学生能方便地自学感兴趣的主题,支持选择、播放、倒退、快进和暂停。每当看到“ 视频讲解:……”,都表明当前主题有对应的视频讲解。视频列表请从本书中文版配套网站获取,网址是http://transbot.ys168.com和https://pan.baidu.com/s/1yd43W。注意,由于是英文视频,所以为了方便索引,书中保留了这些视频的英文名称。
支持材料
部分支持材料本书所有读者都适合。其他仅适合认证教师。
适合本书所有读者的支持材料
* 源代码
* PowerPoint幻灯片
* 视频讲解
获取这些材料请访问本书译者博客(transbot.blog.163.com)或网盘(http://transbot.ys168.com和https://pan.baidu.com/s/1yd43W)。
适合认证教师的资源
选用本书作为教材的教师,可致函责编信箱coo@netease.com,了解详情。
* 教师资源指南(Instructor’s Resource Guide):包括每一章的教学要点、课堂测验/答案和大量编程项目的参考答案。
* Test Bank和Test Generator:用于生成试卷。
* PowerPoint幻灯片:包括本书的程序和插图。
* Lab Manual(实验手册)。
致 谢
在准备本书素材期间,许多个人和团体提供了大量建议和帮助,并和我进行了广泛而深入的探讨。本书第1版大部分内容是我在科罗拉多大学(波德分校)计算机系担任客座教授时写就的。其余内容和后续版本则是在加州大学(圣地亚哥分校)计算机科学与工程系完成的。非常感谢两所学校为本书写作和教学所提供的良好氛围。
特别感谢向这一版和之前各版提供意见或者编程项目的个人,以下人名按字母排序:Alex Feldman,Amber Settle,Andrew Burt,Andrew Haas,Anne Marchant,Barney MacCabe,Bob Holloway,Bob Matthews,Brian R. King,Bruce Johnston,Carol Roberts,Charles Dowling,Claire Bono,Cynthia Martincic,David Feinstein,David Teague,Dennis Heckman,Donald Needham,Doug Cosman,Dung Nguyen,Edward Carr,Eitan M. Gurari,Ethan Munson,Firooz Khosraviyani,Frank Moore,Gilliean Lee,Huzefa Kagdi,James Stepleton,Jeff Roach,Jeffrey Watson,Jennifer Perkins,Jerry Weltman,Joe Faletti,Joel Cohen,John J. Westman,John Marsaglia,John Russo,Joseph Allen,Joseph D. Oldham,Jerrold Grossman,Jesse Morehouse,Karla Chaveau,Ken Rockwood,Larry Johnson,Len Garrett,Linda F. Wilson,Mal Gunasekera,Marianne Lepp,Matt Johnson,Michael Keenan,Michael Main,Michal Sramka,Naomi Shapiro,Nat Martin,Noah Aydin,Nisar Hundewale,Paul J. Kaiser,Paul Kube,Paulo Franca,Richard Borie,Scot Drysdale,Scott Strong,Sheila Foster,Steve Mahaney,Susanne Sherba,Thomas Judson,Walter A. Manrique,Wei Lian Chen和Wojciech Komornicki。
还要感谢用过本书前几版的许多老师,他们的建议相当有价值。最后感谢Kenrick Mock帮我实现了这一版的全部修订。他的工作令我和编辑激赏!