C++精解和程序设计(原书第5版)
作者 : Frank L. Friedman;Elliot B. Koffman
译者 : 温秀梅 丁学钧
丛书名 : 计算机科学丛书
出版日期 : 2008-06-30
ISBN : 7-111-23894-2
定价 : 65.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 512
开本 : 16开
原书名 : Problem Solving, Abstraction, and Design Using C++, Fifth Edition
原出版社:
属性分类: 教材
包含CD :
绝版 :
图书简介

本书在讲解C++程序设计语言的同时,强调软件工程的基本原理和面向对象程序设计,尽早讲解数据抽象、组件重用和其他良好的软件开发方法,同时兼顾面向对象和过程化程序设计方法。
  全书主要内容包括:函数和类的自顶向下设计、选择和循环结构、简单数据类型、流和文件、结构化数据类型(数组和结构体)、类和对象、指针和动态数据结构、数据抽象、使用进程和线程进行多重处理等。

  本书主要特色:
  ●使用大量分析和设计辅助工具,如数据需求表和程序结构图。
  ●许多实例和案例学习贯穿了从程序分析、设计到实现的每一个环节。
  ●每章总结新介绍的C++特征的语法和语义。
  ●详细介绍程序风格和设计方法。
  ●每章有详细的语法错误和运行时错误讨论。 


图书特色

图书前言

本教材适用于1个或2个学期的问题求解和程序设计课程,既适合于上过一学期C++或其他程序设计语言课的学生,也适合于没有任何程序设计背景的学生。可以根据学生的程序设计背景来决定讲解本书前面章节所需的时间和后面各章的讲解范围。
  本书前几个版本代表了一个八年项目的成果,该项目要求编写一本介绍软件工程和面向对象程序设计的基本原理和C++程序设计语言的入门级课程教材,并得到了美国国家科学基金会的部分资助。我们的首要目标是在第一门程序设计课程中推广和介绍程序设计与抽象的健壮性原理。在本书前面的章节中,我们介绍了程序风格、文档、算法和数据结构、面向过程和面向数据模块化、组件重用及程序验证等主题。本书的核心是问题求解与软件设计过程,包括问题分析到程序设计和编码的全过程。
  本教材满足第一门程序设计课程的目标,遵循ACM/IEEE 2001计算课程(CS101或CS111课程)中描述的强制性的第一种方法。因为它不仅介绍了面向对象程序设计和C++标准模板库(STL),而且介绍了递归和动态数据结构,所以也可以把它用作3学期序列课程中的第二门课程(CS102)。因为本书在第1章中介绍了类,在第3章中使用了类,所以在第一门程序设计课程中也可以用本书来介绍对象的简单概念。这种情况下我们建议提前学习第9章,可以在学完第6章后的任何时间来学习第9章。
  第5版的新特征
  第14章是第5版新增的章节,讲述了多重处理的基本概念并介绍了帮助学生理解事件驱动和中断驱动的程序设计的关键思想。该章中涉及的概念包括:父进程、子进程、进程间通信、线程、互斥锁机制和避免死锁技术。该章还讲述了如何使用C++函数来支持这些思想。
  兼顾面向对象和过程化方法
  面向对象的概念和类在本书的开始1.3小节就进行了介绍。2.4和3.7小节讨论了两个系统定义的类—iostream和string类的使用,本书的大部分章节都涉及了类和对象的使用。
  教师关心的一个问题是数组、结构体和类的相对介绍顺序。和上一版一样,首先在第9章介绍了数组和结构体,然后在第10章介绍了类的定义和编码。有的教师可能愿意调换一下顺序,这是完全可以的。关于类的第10章只是在讲解simpleString类的实现时用到了数组,这部分内容可以省略不讲,也可以在讲完数组之后再进行讲解。
  第11章仍然强调类的设计和数据建模,该章介绍了模板类、索引表类、STL向量类、友元函数和运算符重载。第13章中也使用了模板类,该章讨论了动态数据结构:链表、栈、队列和树。本书还讨论了STL容器类和迭代器的使用,以及教给学生如何实现自定义的类。附录E举例说明了C++的继承和虚函数机制。我们尽量兼顾严格以对象为主和完全以过程为中心的两种程序设计方法。我们赞同以对象为主的思想,但是也要注重算法组织和设计的基本概念。学生在第一门程序设计课程中肯定已经学到了过程化设计的基本要素,而我们的任务是:本书在尽早注重数据建模、组件重用和其他良好软件开发的基本原理的基础上讲解过程化设计的基本要素。
  软件工程和面向对象概念
  本书讲解了软件工程和面向对象的许多基本概念,如用户自定义类型、问题域实体和它们之间关系的建模、最小接口、高级组合、信息隐藏、相关分离、参数化组件和继承。本书从一开始就强调了抽象的概念,还提供了许多完整的实例,这些实例从软件规格说明书、问题分析到设计的初始阶段到最终的编码都遵循标准软件开发方法。
  本书对程序风格进行了专门介绍。第3章介绍了作为一系列控制结构的程序的概念,第4章(关于选择结构)和第5章(关于循环结构)进行了更详细的讲解。我们作出的在第一学年课程中介绍软件工程概念的决定在前面几个章节中可以很明显地看出来。在入门课程中我们尽早介绍函数和类,分别在第3章和第6章介绍函数,第3章和第10章介绍类的使用和定义。本书还提供了几个小节来讨论测试、调试和程序验证。
  内容概述
  从概念上讲,本书可以分成3部分。第1章到第6章介绍函数和自顶向下设计的入门概念,详细讲解了选择和循环结构,以及使用这些结构的程序设计决策。良好的问题求解技巧和有效的软件开发之间的联系,早在前三章就建立起来了。前两章的几小节讲述了问题求解, 并且介绍了基于问题求解系统方法的软件开发方法。这些章节中概括的问题求解方法也适用于本书的所有其他案例学习。第2章还介绍了C++的基本要素, 其中的两小节讨论了抽象、数据建模和面向对象程序设计。第3章我们仍然强调问题求解技巧, 讨论了自顶向下设计法和分治法。此外,还讨论了程序组件的重用,以及string类及其成员函数的其他细节。
  第4章到第6章进一步讲解了自顶向下过程化分解方法。第4章介绍选择结构,第5章介绍循环结构。在第6章中,我们回顾了C++函数,介绍了含有输出参数的函数,并提供了一个完整的实例来说明迄今应学会的知识。在第6章的最后还包含了可供选择的一节,该节介绍了递归。
  第7章到第9章介绍简单数据类型、输入和输出、结构化数据类型(数组和结构体)和类。 第7章更加详尽地介绍了简单数据类型,包括对数据抽象的补充说明以及简单数据类型间的内在和外在区别。第9章首先介绍结构化数据类型(数组和结构体),然后介绍了简单的查找和排序算法,举例说明如何使用结构体类型作为函数参数。
  第8章介绍了外部文件的输入/输出。尽管此时学习外部文件看起来可能为时尚早,但我们认为这样做是合适的。程序不会凭空存在,它们操作的数据通常来自外部,而且它们产生的结果数据随后可能被其他程序使用,所以让学生尽早地学习一些与文件输入输出有关的基本概念是重要的,只要这种学习不会干扰其他基本思想的介绍。当然,在学习第8章之前学生已经学习了流输入/输出的基本知识,最起码在第5章使用过格式化函数和输入/输出操作控制符。
  如果学生在一学期的程序设计课程中学过另一门语言中的相应知识,则可以快速介绍第1章到第9章的内容,也许只需用5到6周的时间。如果学生几乎没有程序设计背景,则这些章节的介绍可能要用10到12周的时间。
第10章和第11章介绍中级概念,这些概念可以在第一学期末或第二学期初进行介绍。第10章介绍类和对象的定义和使用。第11章重点介绍数据建模,我们首先介绍多维数组、结构体数组和类数组,然后通过类模板和向量类的使用实例来扩展我们的建模能力。
  第12、13和第14章以一定的深度介绍更高级的主题:递归(第12章)、链表、栈、队列、树(第13章)、多重处理和线程(第14章)。第12章和第13章的内容在第一学年的第2学期介绍。第14章可以在这门课程中讲解,也可以在以后的操作系统课程中讲解。
  指针的介绍
  我们在真正需要指针的地方—动态数据结构部分(第13章)介绍了指针。指针是C++语言中比较危险、相对不受保护的知识点之一,所以不是入门级课程的必备内容。第13章开始介绍了new和delete运算符的使用以及堆内存的动态分配和释放。 我们举例说明了动态数据结构(如简单链表、栈和队列、二叉树)的操作。
教学特点
  一些教学特点使得本书更适用于作为入门教材。这些特点如下:
  ·一致地使用了分析和设计辅助工具,如数据需求表和程序结构图
  ·每节末有自测题和程序设计题
  ·每章末有快速检测习题
  ·每章末有程序设计题
  ·许多实例和案例学习贯穿了从程序分析、设计到实现的每一个环节
  ·每个新介绍的C++特征的语法和语义总结
  ·程序风格和设计指南的总结
  ·每章有详细的语法错误和运行时错误讨论
  ·每章复习和复习题
  附录
  本书提供的附录对相关知识进行了总结,包括字符集、C++保留字、C++运算符和函数库(包括描述和所在具体章节),还有一个附录举例说明了继承和虚函数。
  教辅材料
  本书的所有读者都可以从网站www. aw. com/cssupport得到源代码。
  需要下列教师辅助材料的教师请按照书后的“教学支持申请表”上提供的联系方式联络培生教育出版集团北京代表处。
  ·PowerPoint幻灯片
  ·带有问题解答的教师手册
  ·测试题
  ·源代码
  致谢
  许多人都参与了该教材的出版工作。我们要感谢WaveRules LLC公司的Jeff Warsaw,他对此版本的新章节做出了重要贡献;天普大学的Paul LaFollette、Paul Wolfgang和Rajiv Tewari对此书第1版做出了很大贡献;天普大学的研究生Donna Chrupcala、Bruce Weiner和Judith Wilson也对第1版的出版作出了很大贡献;Steve Vinoski对后几章相关的C++资料提供了详细的说明。
  在建议版本改进和发现错误方面,主要的审校人员和类测试人员发挥了重要作用。对于第1版,这些人员主要包括:Allen Alexander(特拉华技术与社区学院)、Ruth Barton 和Richard Reid(密执安州立大学)、Larry Cottrell(中佛罗里达大学)、H.E. Dunsmore和Russell Qunong(珀杜大学)、Donna Krabbe(圣约瑟夫山学院)、Sally Kyvernitis(纽曼学院)、Xiaoping Jia(德宝大学)、Xiannong Meng和Rick Zaccone(巴科内尔大学)、Jeff Buckwalter和Kim Summerhays(旧金山大学)和Jo Ellen Perry(北卡罗来纳大学)。Sally Kyvernities、Donna Skalski以及Frank Friedman的女儿Dara和Shelley做了很有价值的校对和编辑工作。
我们也非常感谢本书其他版本的主要审校人员,他们工作非常辛苦,各种信息反馈非常及时。他们包括:William E. Bulley(密执安大学网络公司)、Greg Comeau(Comeau Computing)、Bruce Gilland(科罗拉多大学博尔德分校)、William I. Grosky(韦恩州立大学)、Bina Ramamurthy(布法罗纽约州立大学)和W. Brent Seales(肯塔基大学)。
  Frank Friedman十分感激软件工程协会Pittsburgh团队的几个成员,主要包括:Mary Shaw、Norm Gibbs(吉尔福德学院)和Gary Ford,正是由于他们这几年的支持,才使本书得以出版。
  在此过程中很高兴和Addison-Wesley团队一起合作。策划编辑Michael Hirsch和编辑助理Lindsey Triebel在原稿修订的各个阶段给予了指导和鼓励,Marilyn Lloyd负责了本书的出版,而Michelle Brown和Sarah Milmore负责了市场运作。

封底文字

本书在讲解C++程序设计语言的同时,强调软件工程的基本原理和面向对象程序设计,尽早讲解数据抽象、组件重用和其他良好的软件开发方法,同时兼顾面向对象和过程化程序设计方法。 全书主要内容包括:函数和类的自顶向下设计、选择和循环结构、简单数据类型、流和文件、结构化数据类型(数组和结构体)、类和对象、指针和动态数据结构、数据抽象、使用进程和线程进行多重处理等。 本书主要特色: ●使用大量分析和设计辅助工具,如数据需求表和程序结构图。 ●许多实例和案例学习贯穿了从程序分析、设计到实现的每一个环节。 ●每章总结新介绍的C++特征的语法和语义。 ●详细介绍程序风格和设计方法。 ●每章有详细的语法错误和运行时错误讨论。

作者简介

Frank L. Friedman;Elliot B. Koffman:Frank L. Friedman: 美国天普大学计算机与信息科学系的教授,在任教的30多年里,开设过程序设计、软件工程、编译器设计等多门课程,并撰写了很多关于计算机科学教育的论文。他与Elliot B. Koffman合著了8本关于结构化程序设计的书籍,还担任过ACM会议委员会主席。
Elliot B. Koffman: 美国一流的计算机科学教育家,天普大学计算机与信息科学系教授,有近40年的教学经验。他曾经担任ACM Task Force的主席,已出版著作数十部,其中包括多部非常成功的编程语言教材。

译者简介

温秀梅 丁学钧:暂无简介

译者序

C++是一种高效、功能强大的计算机语言,它既可以进行结构化程序设计,也可以进行面向对象程序设计,因而C++成为了当前商业软件开发的主流语言,同时也是程序设计初学者的首选语言。
  原书作者摈弃许多C++教材中侧重介绍语法,而不注重编写程序所需的基本逻辑技能的作法,而是以灵活的方式、完整的案例教学、强调软件开发方法的前5个步骤、鲜明的程序风格和语法陈列、全面的本章回顾,以及对语法和运行时错误的详细讨论来加以讲授。作者运用C++语言来介绍和强调软件工程和面向对象编程的基本原理,同时有针对性地对这些原理进行了取舍,使它们适合计算机学科新生的学习能力,同时把问题求解的算法分析融于其中。因此,本书作为第一门程序设计与算法分析课程的教材,非常适合没有任何编程基础的学生学习。
  本书主要内容包括:函数和类的自顶向下设计、选择和循环结构、简单数据类型、流和文件、结构化数据类型(数组和结构体)、类和对象、指针和动态数据结构、数据抽象、使用进程和线程进行多重处理等。本书可以作为计算机及相关专业的程序设计基础课程的教材,也可以作为C++程序设计的自学或函授学习的参考书。
  全书的翻译工作是集体合作的结晶。参加翻译的有:丁学钧(第1章)、李建华(第2章)、祁爱华(第3章)、温秀梅(第4、10、11章、奇数自测题答案、索引)、高丽婷(第5章)、周丽莉(第6章)、王振岩(第7章)、李虹(第8、14章)、赵巍(第9、12章)、宋淑彩(第13章),王利霞(附录A~E),孟凡兴(人物访谈)。另外李耀辉、岳杰、司亚超、孙皓月为本书部分章节的初译做了大量工作,最后由温秀梅、丁学钧和刘建臣负责全书的审校工作并完成统稿。
限于水平,在译文中难免有错误和不妥之处,诚望同仁能予以指正。

  译者
  2008年春

图书目录

出版者的话
译者序
前言

第1章  计算机、问题求解及程序设计导言 1
1.1  计算机概述 1
1.1.1  早期的计算机 1
1.1.2  计算机的分类 2
1.1.3  计算机资源共享 2
1.2  计算机硬件 3
1.2.1  存储器 4
1.2.2  中央处理器CPU 6
1.2.3  输入/输出设备 7
1.2.4  计算机网络 7
1.2.5  万维网 8
1.3  计算机软件 9
1.3.1  操作系统 9
1.3.2  应用软件 11
1.3.3  程序设计语言 11
1.3.4  面向对象程序设计 12
1.4  高级语言程序设计的处理 13
1.5  软件开发方法 16
1.5.1  明确问题需求阶段 16
1.5.2  分析问题阶段 16
1.5.3  设计阶段 17
1.5.4  实现 17
1.5.5  测试 18
1.5.6  维护 18
1.5.7  如何面对软件开发过程中的失败 18
1.6  应用软件开发方法 18
1.7  计算机程序员的职业道德 20
1.7.1  隐私和数据误用 20
1.7.2  计算机黑客 20
1.7.3  剽窃和软件盗版 21
1.7.4  计算机资源的误用 21
本章小结 22
快速检测习题 22
复习题 23
采访Bjarne Stroustrup 23
第2章  C++概述 26
2.1  C++语言基本语法成分 26
2.1.1  注释 27
2.1.2  编译预处理命令#include 27
2.1.3  命名空间Namespace std 28
2.1.4  main函数 28
2.1.5  声明语句 29
2.1.6  可执行语句 29
2.2  保留字和标识符 30
2.2.1 保留字 30
2.2.2  标识符 31
2.2.3  大写字母和小写字母 31
2.2.4  程序风格—选择标识符的名称 31
2.3  数据类型和声明 32
2.3.1 数据类型 32
2.3.2  string类 34
2.3.3  数据类型的意义 35
2.3.4  声明 35
2.3.5  常量声明 36
2.4 可执行语句 38
2.4.1  内存中的程序 38
2.4.2  赋值语句 38
2.4.3  输入/输出操作 39
2.4.4  输入语句 40
2.4.5  程序输出 41
2.4.6  return语句 42
2.5  C++程序的一般形式 43
2.5.1  程序风格—程序中的空格 44
2.5.2  程序中的注释 44
2.5.3  程序风格—使用注释 44
2.6  算术表达式 46
2.6.1  “/”和“%”运算符 46
2.6.2  混合类型表达式的数据类型 47
2.6.3  混合类型的赋值语句 47
2.6.4  包含多个运算符的表达式 48
2.6.5  C++中数学公式的写法 50
2.7  交互模式、批处理模式和数据文件 54
2.7.1  输入重定向 55
2.7.2  程序风格—提示与回显输出 55
2.7.3  输出重定向 56
2.8  常见的程序设计错误 57
2.8.1  语法错误 57
2.8.2  运行时错误 58
2.8.3  未检测到的错误 59
2.8.4  逻辑错误 59
本章小结 60
快速检测习题 61
复习题 62
程序设计题 62
采访Jos巈 Lajoie 64
第3章  使用函数和类进行自顶向下设计 66
3.1  根据已有信息构建程序 66
3.2  库函数 72
3.2.1  程序风格—加下划线
强调新结构 73
3.2.2  C++库函数 74
3.2.3  预习 75
3.3  自顶向下设计和结构图 76
3.4  无参函数 77
3.4.1  函数原型 78
3.4.2  函数定义 78
3.4.3  函数在程序中的布局 79
3.4.4  程序风格—在函数声明和
定义中使用注释 81
3.4.5  函数的执行顺序 81
3.4.6  使用函数子程序的优点 81
3.5  带输入参数的函数 84
3.5.1  带输入参数的void函数 84
3.5.2  带输入参数并有一个返回值的函数 85
3.5.3  程序风格—函数接口注释 87
3.5.4  程序风格—问题输入与输入参数 87
3.5.5  带多个参数的函数 88
3.5.6  实参和形参列表的对应 89
3.5.7  函数的数据区 89
3.5.8  使用驱动程序测试函数 90
3.6  名称作用域 91
3.7  通过类扩展C++:使用string类 93
3.7.1  string类 93
3.7.2  声明string对象 94
3.7.3  读取和显示string对象 94
3.7.4  字符串的赋值和连接 94
3.7.5  运算符重载 95
3.7.6  点表示法(函数length
和at的调用) 95
3.7.7  用于字处理操作的成员函数 95
3.7.8  把子串赋给string对象 96
3.8  常见程序设计错误 97
本章小结 99
快速检测习题 100
复习题 101
程序设计题 101
采访Mark Hall 103
第4章  选择结构:if和switch语句 105
4.1  控制结构 105
4.2  逻辑表达式 106
4.2.1  使用关系和相等运算符的
逻辑表达式 106
4.2.2  使用逻辑运算符的逻辑表达式 107
4.2.3  运算符的优先级 108
4.2.4  书写C++条件 109
4.2.5  字符和字符串的比较 110
4.2.6  布尔类型赋值 110
4.2.7  布尔类型值的表示 111
4.2.8  用整数表示逻辑值 111
4.3  if控制语句概述 112
4.3.1  带两个分支的if语句 112
4.3.2  简单if语句 113
4.3.3  带有字符和字符串的if语句条件 114
4.3.4  if语句的格式 115
4.4  带复合选项的if语句 116
4.4.1  程序风格—使用复合的true或
false语句编写if语句 117
4.4.2  跟踪if语句 117
4.5  算法的决策步骤 119
4.5.1  程序风格—使用全局常量增强
程序的可读性和可维护性 124
4.5.2  关于标识符作用域的注意事项 124
4.5.3  在结构图中添加数据流信息 124
4.5.4  关于软件开发方法的说明 125
4.6  检查算法的正确性 125
4.7  嵌套if语句和多分支条件判断 127
4.7.1  嵌套if语句和if语句序列的比较 127
4.7.2  把嵌套if语句写成多分支
条件判断语句 128
4.7.3  条件顺序 128
4.7.4  程序风格—验证变量值 130
4.7.5  逻辑表达式的短路检测 131
4.8  switch控制语句 132
4.8.1  正确使用break关键字 134
4.8.2  嵌套if语句和switch语句的比较 134
4.8.3  使用switch语句选择候选函数 134
4.9  常见的程序设计错误 136
本章小结 136
快速检测习题 138
复习题 139
程序设计题 140
第5章  重复和循环语句 143
5.1  计数循环和while语句 143
5.1.1  while语句 144
5.1.2  while语句的语法规则 145
5.2  在循环中累计求和或乘积 147
5.2.1  程序风格—编写通用的循环 148
5.2.2  求一组数据的乘积 149
5.2.3  复合赋值运算符 149
5.3  for语句 151
5.3.1  程序风格—for语句的格式 152
5.3.2  自增/自减运算符 152
5.3.3  程序风格—局部变量的声明 153
5.3.4  步长不为1的自增/自减 154
5.3.5  将结果以表格形式显示 154
5.4  条件循环 156
5.4.1  循环控制变量递减的循环 157
5.4.2  执行次数为零的循环 160
5.4.3  程序风格—在函数
子程序中执行循环 160
5.4.4  更为通用的条件循环 160
5.5  循环设计和循环模式 161
5.5.1  哨兵值控制的循环 161
5.5.2  计算平均值 162
5.5.3  标志控制的循环 162
5.6  do-while语句 166
5.7  while、for和do-while循环回顾 169
5.8  循环嵌套 171
5.9  调试、测试程序 174
5.9.1  使用调试器 174
5.9.2  不使用调试器调试程序 175
5.9.3  差1错误 176
5.9.4  测试 176
5.10  常见的程序设计错误 176
本章小结 178
快速检测习题 180
复习题 181
程序设计题 182
采访Mike Weisert 184
第6章  模块化程序设计 186
6.1  值和引用参数 186
6.1.1  值调用参数与引用调用参数 188
6.1.2  void类型的函数能够返回结果 189
6.1.3  使用引用参数或值参数的时机 189
6.1.4  程序风格—书写形参列表 189
6.1.5  值参数和引用参数的比较 190
6.1.6  值参数提供的保护 190
6.1.7  实参/形参列表对应关系回顾 190
6.2  具有输入和输出参数的函数 193
6.3  使用函数进行逐步设计 198
6.3.1  程序中标识符的多次声明 204
6.3.2  程序风格—使用函数实现
相对简单的算法步骤 204
6.3.3  程序风格—内聚函数 204
6.4  在函数中使用对象 205
6.5  程序系统的调试和测试 207
6.5.1  自顶向下测试和桩模块 207
6.5.2  自底向上测试和驱动器 207
6.5.3  程序系统的调试提示 208
6.5.4  标识符的作用域和观察窗口变量 209
6.5.5  黑盒测试与白盒测试 209
6.6  递归函数(选学) 210
6.7  常见程序设计错误 212
本章小结 213
快速检测习题 214
复习题 215
程序设计题 215
采访Robert Sebesta 218
第7章 简单数据类型 220
7.1  常量复习 220
7.2  数值数据类型的内部表示 221
7.2.1  数据类型的定点表示和浮点表示 221
7.2.2  整型 222
7.2.3  浮点类型 222
7.2.4  数值型值常量的数据类型 222
7.2.5  整型和浮点类型的取值范围 222
7.2.6  数值误差 223
7.2.7  混合类型:类型提升 223
7.2.8  类型转换 224
7.2.9  强制类型转换 224
7.3  字符数据和函数 225
7.4  布尔类型数据和逻辑表达式 228
7.4.1  逻辑表达式求补 228
7.4.2  布尔类型函数 229
7.4.3  布尔类型数据的输入与输出 230
7.5  枚举类型 231
7.5.1  字符作为枚举元素值 232
7.5.2  枚举类型的比较 232
7.5.3  整数类型之间的差别 232
7.5.4  读写枚举类型值 233
7.5.5  程序风格—在switch语句中
使用return语句 234
7.5.6  枚举类型声明语句的放置位置 234
7.5.7  枚举类型的强制类型转换 235
7.6  常见程序设计错误 236
本章小结 237
快速检测习题 238
复习题 239
程序设计题 239
第8章  流和文件 242
8.1  标准输入/输出流 242
8.1.1  每次读取一个字符 244
8.1.2  程序风格—使用流作为条件 246
8.2  外部文件 247
8.2.1  交互式与批处理 247
8.2.2  外部文件的目录名 248
8.2.3  将流连接到文件 248
8.2.4  copyLine函数 250
8.2.5  换行符的更多信息 250
8.2.6  使用getline处理文件流 251
8.2.7  程序风格—读取文件名 252
8.3  使用外部文件进行程序间的通信 252
8.4  关于读取字符串数据的更多信息 256
8.5  输入/输出控制符 258
8.6  常见程序设计错误 260
本章小结 261
快速检测习题 262
复习题 262
程序设计题 263
采访Anita Borg 266
第9章  数据结构:数组和结构体 268
9.1  数组数据类型 268
9.1.1  数组声明 268
9.1.2  数组的初始化 270
9.1.3  数组下标 271
9.2  数组元素的顺序存取 273
9.3  数组参数 277
9.3.1  数组元素作为函数参数 277
9.3.2  传递数组参数 278
9.4  读取部分数组元素 281
9.5  查找和排序数组 283
9.5.1  查找数组中的最小值 283
9.5.2  程序风格—作为注释的断言 284
9.5.3  数组查找 285
9.5.4  对数组按升序进行排序 286
9.6  Big-O方法分析算法 288
9.6.1  查找算法的分析 288
9.6.2  排序算法的分析 288
9.7  结构体数据类型 289
9.7.1  声明结构体类型和结构体变量 289
9.7.2  访问结构体成员 291
9.8  结构体作为操作数和参数 292
9.8.1  结构体复制或赋值 292
9.8.2  结构体作为参数进行传递 292
9.8.3  读取结构体 293
9.8.4  引用参数的效率 294
9.9  字符串作为字符数组(选学) 294
9.9.1  声明和初始化字符数组 295
9.9.2  读写字符数组 295
9.9.3  一些有用的字符数组函数 296
9.10  常见的程序设计错误 297
本章小结 297
快速检测习题 298
复习题 299
程序设计题 300
第10章  用户自定义类 304
10.1  类的定义和使用 304
10.1.1  counter类 304
10.1.2  counter类的定义 305
10.1.3  头文件counter.h中的编译
预处理命令 307
10.1.4  使用counter类 307
10.1.5  文件CounterTest.cpp中的
编译预处理命令 308
10.2  类的实现 309
10.2.1  构造函数 311
10.2.2  访问器和修改器函数 311
10.2.3  文件counter.cpp中的编译
预处理命令 311
10.3  类和对象的使用规则总结 312
10.3.1  对象作为类的实例 312
10.3.2  公有访问和私有访问 312
10.3.3  类和成员函数定义的语法 313
10.3.4  结构体和类的比较 314
10.3.5  工程文件和独立编译 315
10.3.6  数组、结构体和类的组合 315
10.3.7  函数重载和多态性 315
10.4  类对象作为操作数和参数 316
10.5  fraction类 317
10.5.1  fraction类的设计 317
10.5.2  使用fraction类 319
10.5.3  fraction类的实现文件 320
10.6  circle类 323
10.6.1  circle类的设计 323
10.6.2  使用circle类 325
10.6.3  circle类的实现文件 325
10.7  SimpleString类 327
10.7.1  simpleString类的设计 327
10.7.2  simpleString类的定义 328
10.7.3  测试simpleString类的成员函数 329
10.7.4  simpleString类的实现文件 330
10.8  储蓄账户类 338
10.9  常见的程序设计错误 338
本章小结 339
快速检测习题 340
复习题 340
程序设计题 341
采访Timothy Budd 343
第11章  数据抽象和面向对象设计 345
11.1  多维数组 345
11.1.1  声明二维数组 345
11.1.2  初始化二维数组 346
11.1.3  使用循环嵌套处理二维数组 346
11.1.4  二维数组作为函数参数 347
11.1.5  多维数组 348
11.2  结构体数组 349
11.3  模板类 351
11.3.1  模板类的定义 351
11.3.2  模板类的实现 353
11.3.3  支持独立编译的编译指令 355
11.4  索引表抽象数据类型 355
11.4.1  为何使用索引表类 355
11.4.2  索引表类的分析和设计 356
11.4.3  使用indexList类 358
11.5  实现索引表类 360
11.6  面向对象设计举例 365
11.7  运算符重载和友元 371
11.7.1  运算符重载 371
11.7.2  友元 372
11.7.3  实现电话号码簿entry类 373
11.8  vector类 375
11.8.1  vector类的成员函数 376
11.8.2  通过迭代器访问向量 376
11.8.3  标准算法 377
11.8.4  在电话号码簿程序中使用
vector和algorithm类 378
11.9  常见的程序设计错误 381
本章小结 382
快速检测习题 383
复习题 383
程序设计题 384
采访John Lakos 387
第12章  递归 389
12.1  递归的特点 389
12.2  跟踪递归函数 391
12.2.1  跟踪递归函数 391
12.2.2  逆序显示字符 392
12.2.3  函数调用中的栈 394
12.2.4  C++中参数栈的实现 395
12.3  递归的数学函数 396
12.4  带有数组参数的递归函数 400
12.5  使用递归方法解决问题 404
12.6  常见的程序设计错误 408
本章小结 409
快速检测习题 409
复习题 410
程序设计题 410
采访Marshall Cline 411
第13章  指针和动态数据结构 414
13.1  指针和new运算符 414
13.1.1  通过指针访问数据 415
13.1.2  指针操作 415
13.1.3  指向结构体的指针 416
13.2  堆操作 418
13.2.1  new运算符对堆的影响 418
13.2.2  将内存单元返还给堆 418
13.3  链表和list类 419
13.3.1  声明结点 420
13.3.2  链接结点 420
13.3.3  在链表中插入结点 421
13.3.4  在表头插入结点 422
13.3.5  在表尾插入结点 422
13.3.6  删除结点 422
13.3.7  遍历链表 423
13.3.8  循环链表和双向链表(选学) 424
13.3.9  list类 425
13.4  栈抽象数据类型 427
13.4.1  C++的stack类 427
13.4.2  实现stack模板类 430
13.4.3  实现栈操作 431
13.4.4  测试栈ADT 432
13.5  队列抽象数据类型 433
13.5.1  C++中的queue类 434
13.5.2  实现队列ADT 434
13.6  二叉树 438
13.6.1  二叉搜索树 439
13.6.2  在二叉搜索树中进行查找 439
13.6.3  创建二叉搜索树 440
13.6.4  显示二叉搜索树 441
13.7  二叉搜索树的抽象数据类型 443
13.7.1  二叉树类的设计 443
13.7.2  二叉树类的实现 444
13.8  二叉搜索树的效率 448
13.9  常见的程序设计错误 449
13.9.1  语法错误 449
13.9.2  运行时错误 449
本章小结 450
快速检测习题 450
复习题 451
程序设计题 453
第14章  使用进程和线程进行多重处理 456
14.1  多任务处理 456
14.1.1  串行程序设计和并行程序设计 456
14.1.2  时间共享多任务处理 457
14.1.3  抢占式多任务处理 457
14.1.4  时间片与并行关系 458
14.1.5  并发程序设计 459
14.2  进程 459
14.2.1  创建进程 460
14.2.2  等待线程 461
14.2.3  由进程执行另一程序 462
14.3  进程间通信与管道 463
14.3.1  管道 463
14.3.2  使用管道 464
14.3.3  使用标准输入进行进程间通信 465
14.3.4  举例说明父进程与
子进程间的通信 466
14.4  线程 469
14.4.1  创建线程 469
14.4.2  线程同步 471
14.4.3  互斥锁 472
14.4.4  死锁 474
14.5  常见程序设计错误 486
本章小结 486
C++结构复习 487
快速检测习题 488
复习题 488
程序设计题 488
附录A  ASCII字符集 490
附录B  保留字和特殊字符 491
附录C  C++库函数精选 492
附录D  运算符 496
附录E  继承和多态性简介 497

教学资源推荐
作者: (美)Y. Daniel Liang 著
作者: [美] 罗伯特·塞奇威克(Robert Sedgewick), 凯文·韦恩(Kevin Wayne), 罗伯特·唐德罗(Robert Dondero)著
作者: Bruce Eckel, Chuck Allison