C++程序设计(原书第3版)
作者 : (美)Y.Daniel Liang 著 阿姆斯特朗亚特兰大州立大学
译者 : 刘晓光 李忠伟 任明明 王刚 译
丛书名 : 计算机科学丛书
出版日期 : 2015-01-16
ISBN : 978-7-111-48514-8
定价 : 79.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 590
开本 : 16
原书名 : Introduction to Programming with C++,Third Edition
原出版社: Pearson Education Asia
属性分类: 教材
包含CD :
绝版 :
图书简介

本书采用“问题驱动”、“基础先行”和“实例和实践相结合”的方式,阐明了基本的C++特性。本书共分为三部分,第一部分介绍C++程序设计的基本概念,第二部分介绍面向对象程序设计方法,第三部分介绍算法与数据结构方面的内容。为了帮助学生更好地掌握相关知识,本书每章都包括以下模块:目标,引言,关键点,检查点,问题和实例研究,本章小结,在线测验,程序设计练习,提示、小窍门、警示和教学提示。
本书可以作为高等院校计算机及相关专业C++程序设计课程的教材,也可以作为C++程序设计的自学参考书。

图书特色

本书保持了Liang博士系列丛书中一贯的标志性的教与学的哲学:以实例教,由实践学。通过使用他所提出的已经经过实践检验的“基础先行”的方法,Liang博士在本书中通过大量实例阐明了基本的C++特性,使得学生可以通过实践来更有效地进行学习。
本书首先帮助学生循序渐进地学习所有必需和重要的基本概念,然后再进入面向对象程序设计方法的学习,最终掌握构建具有异常处理和输入输出功能的有意义的应用程序的方法。基本概念都是使用简短且吸引人的实例来进行阐述的。他还在实例研究中给出了一些较大规模的实例,并附以整体的分析讨论和详细的逐行注解。贯穿全书的实例和练习都以问题求解为中心,力图培养学生开发可重用组件并用之创建实际项目的意识。
与第2版相比,第3版在文字表达、内容组织、课后练习和附加材料方面都得到了显著改善。

第3版有以下创新特色
按照逻辑顺序,重新组织了各章的内容和主题,增加了许多有趣的实例,以及引人入胜的课后练习。
在每一节的开始,以“关键点”的形式说明重要的概念和内容;在每一节的结束,以“检查点”的形式检查学生对于内容的掌握程度。
第4章就介绍了string类型,以便学生能够尽早使用该类型编写程序。
列出常见的编程错误和陷阱,让学生避免犯这些错误。

作者简介
Y. Daniel Liang 普度大学终身教授,阿姆斯特朗亚特兰大州立大学计算机科学系教授。他所编写的Java教程在美国大学Java课程中采用率最高,同时他还兼任Prentice Hall Java系列丛书的编辑。

图书前言

本版新内容
与第2版相比,第3版增加了许多新内容,具体包括:
为了让内容更简洁易懂,几乎重写了各种表示方法、主要内容、实例和练习。
新的实例和练习有利于激发学生编程的兴趣。
通过关键点强调本节的重要概念。
检查点以问题的形式帮助学生回顾学习的过程,并评估对于概念和实例的掌握程度。
视频讲解(VideoNote)通过短视频讲解来加强对概念的理解。
为了尽早使用字符串,本书在第4章就介绍了string对象。
为了让学生尽早使用文件编写程序,本书在第4章就介绍了简单的输入输出概念。
将函数相关的内容集中在第6章介绍。
列出常见的编程错误和陷阱,让学生避免犯这些错误。
尽量用简单的例子替换原来的复杂例子(例如,上一版第8章中的九宫格问题被改为检验相应的解是否正确,而完整的九宫格问题放到本书的网站上)。
第18章介绍主要算法技术:动态规划、分治、回溯和贪心算法,并通过新的实例讲解如何设计有效的算法。
在扩展阅读部分介绍C++11的新特色:foreach循环、自动类型引用等。在本书网站的附加材料中还有Lambda函数的介绍。
教学特色
为了帮助学生更好地掌握相关知识,本书使用了下列模块:
目标 列出学生应该掌握的内容,这样当学习完这一章后,学生能够确认自己是否达到了学习目标。
引言 提出一个代表性问题,以便读者对所要学习的内容有一个概括的了解。
关键点 覆盖了本节的重要概念。
检查点 通过提供提示性问题帮助学生复习相关内容并评估掌握的程度。
问题和实例研究 通过精心选择,以一种容易掌握的形式教授求解问题和编程的概念。本书使用很多小的、简单的、激励性的实例来表达重要思想。
本章小结 概括了每章中学生应该理解和记忆的重要内容,其目的是强化学生对本章重要概念的理解。
在线测验 通过MyProgrammingLab(www.myrogramminglab.com)网站,本书还为学生提供了自测题,用于学生自我评估对编程概念和技巧的掌握程度。
程序设计练习 为学生提供应用新技巧的机会。题目的难度等级分为容易(没有星号)、中等(*)、难(**)和挑战(***)。掌握编程的唯一途径就是练习,练习,再练习。为此,本书提供了大量练习题。
提示、小窍门、警示和教学提示 贯穿于全书正文中,为编程训练提供有益的建议和意见。
提示 提供相关主题的额外信息,并强化重要的概念。
小窍门 教授好的编程风格和练习。
警示 帮助学生避免编程错误和陷阱。
教学提示 对如何有效使用本书资源给出建议。
灵活的章节组织
本书提供了灵活的章节组织,如下图所示。
本书的组织结构
本书分为3部分,每部分都基于一个主题围绕着问题求解和使用C++编程展开。
第一部分:编程基础(第1~8章)
这部分内容是起点,为你着手开始用C++编程做准备。你可以初步了解C++(第1章),并学习基础编程技术,包括基本数据类型、表达式和运算符(第2章),分支语句(第3章),数学函数、字符和字符串(第4章),循环(第5章),函数(第6章),数组(第7、8章)。
第二部分:面向对象编程(第9~16章)
这部分介绍面向对象编程。C++是一种面向对象编程语言,它具有抽象、封装、继承和多态等特性,适合于编写模块化、可扩充、可重用的软件。你将学习基于对象和类的编程(第9章),如何设计类(第10章),指针和动态内存管理(第11章),使用模板的通用类(第12章),基于IO类的文件输入输出(第13章),利用运算符简化函数(第14章),类的派生(第15章),利用异常处理编写可靠的程序(第16章)。
第三部分:算法和数据结构(第17章以及扩展阅读的第18~26章)
这部分主要介绍数据结构方面的内容。第17章介绍递归以及如何编程解决适合递归的问题。第18章介绍如何评价算法的效率,以便选择最适合应用程序的算法。第19章介绍各种排序算法并分析它们的复杂度。第20章介绍如何设计和实现链表、队列和优先队列。第21章介绍二分搜索树。第22和23章介绍C++的标准模板库。第24和25章介绍图算法及其应用。第26章介绍平衡二叉搜索树。
C++开发工具
可以使用任意文本编辑器来编写C++程序,例如Windows的记事本、写字板等。可以通过命令行窗口编译和运行这些程序。也可以使用C++开发工具,例如Visual C++、Dev-C++等。这些工具提供了一个集成开发环境(IDE),方便程序的快速编写。因为编辑、编译、链接、运行和调试都集成在一个图形化的用户界面中,所以有效地使用这些工具将显著提高编程效率。在本书网站的附加材料中提供了如何使用Visual C++、Dev-C++来创建、编译和运行程序。本书的所有程序都经过Visual C++ 2012和GNU C++验证。
利用MyProgrammingLab网站进行在线测验和评估
MyProgrammingLab网站可以帮助学生全面掌握编程的逻辑、语义和语法。通过对学生测验和练习的实时和个性化反馈,MyProgrammingLab可以有效提升初学者的编程能力,使他们在学习高级语言编程时不再局限于基本概念和范例的学习。
作为一个自我学习和家庭作业的工具,MyProgrammingLab提供了数百个围绕着课本内容组织的小练习。对于学生来说,系统能够自动检测并指出学生提交代码的逻辑和语法错误,从而帮助学生找出错误的位置和原因。对教师来说,系统提供的成绩单存储了每一个学生的正确和错误的答案以及相关的代码,这能有效地帮助教师评估学生的成绩。
MyProgrammingLab是为本书读者服务的。要了解更详细的情况,查看教师和学生的反馈,或者在你的课程中使用MyProgrammingLab,请直接访问www.myprogramminglab.com。
学生资源网站
学生资源网站(www.pearsonhighered.com/liang)包括以下内容:
检查点的答案。
偶数编号的程序设计练习的答案。
实例的源程序。
算法动画演示。
勘误表。
附加材料
本书涵盖了必要的主题,而附加材料则介绍了一些读者可能会感兴趣的主题和内容。附加材料可以从本书的官方网站(www.pearsonhighered.com/liang)获得。
教师资源网站
教师资源网站(www.pearsonhighered.com/liang)包括以下内容:
PowerPoint格式讲义文件,其中包括彩色按钮、语法项高亮显示的源码,同时可以不退出PowerPoint运行程序。
所有程序设计练习的答案,学生只可以访问偶数编号的练习题答案。
测试试卷,大多数试卷包括以下4种题型:
多选题或简答题。
程序纠错。
看程序写结果。
编写程序。
项目信息。通常,每个项目都会给出相应描述,以方便学生分析、设计和实现该项目。
视频讲解
本书20%的视频讲解是全新的。在上一版中引入视频讲解的目的是为关键内容的实例讲解提供额外帮助,并展示从设计到代码编写这一求解问题的全过程。读者可以根据需要通过本书配套网站付费购买相应视频讲解内容。
致谢
感谢阿姆斯特朗亚特兰大州立大学给我机会讲授C++课程,并支持我将授课内容编写成为教材。教学是我不断提高本书质量的动力。还要感谢使用本书的教师和学生,他们提出了许多宝贵的意见、建议、错误报告和鼓励。
还要感谢为这一版和之前版本做出贡献的许多优秀的评阅人。他们是: Anthony James Allevato (弗吉尼亚理工学院),Alton B. Coalter (田纳西大学马丁分校),Linda Cohen (福赛斯理工学院),Frank David Ducrest (路易斯安那大学拉斐特分校),Waleed Farag (宾夕法尼亚州印第安纳大学),Max I. Fomitchev (宾夕法尼亚州立大学),Jon Hanrath (伊利诺伊理工大学),Michael Hennessy (俄勒冈大学), Debbie Kaneko (欧道明大学),Henry Ledgard (托莱多大学),Brian Linard (加州大学河滨分校),Dan Lipsa (阿姆斯特朗亚特兰大州立大学),Jayantha Herath (圣克劳德州立大学),Daqing Hou (克拉克森大学),Hui Liu (密苏里州立大学),Ronald Marsh (北达科他大学),Peter Maurer (贝勒大学),Jay McCarthy (杨百翰大学),Jay D. Morris (欧道明大学),Charles Nelson (洛克谷学院),Ronald Del Porto (宾夕法尼亚州立大学),Mitch Pryor (得克萨斯大学),Martha Sanchez (得克萨斯大学达拉斯分校),William B. Seales (肯塔基大学),Kate Stewart (塔拉哈西社区学院),Ronald Taylor (莱特州立大学),Matthew Tennyson (布拉德利大学),David Topham (奥龙尼学院),Margaret Tseng (蒙哥马利学院),Barbara Tulley (伊丽莎白城学院)。
非常荣幸有机会与培生教育出版集团进行愉快的合作。我还要感谢Tracy Johnson和她的同事Marcia Horton、Carole Snyder、Yez Alayan、Scott Disanno、Kayla Smith-Tarbox、Gillian Hall,以及负责组织、生产和推动该项目的其他同事。
一如既往,我还要特别感谢来自我的妻子Samantha的爱、支持和鼓励。

上架指导

计算机\程序设计

封底文字

本书保持了Liang博士系列丛书中一贯的标志性的教与学的哲学:以实例教,由实践学。通过使用他所提出的已经经过实践检验的“基础先行”的方法,Liang博士在本书中通过大量实例阐明了基本的C++特性,使得学生可以通过实践来更有效地进行学习。
本书首先帮助学生循序渐进地学习所有必需和重要的基本概念,然后再进入面向对象程序设计方法的学习,最终掌握构建具有异常处理和输入输出功能的有意义的应用程序的方法。基本概念都是使用简短且吸引人的实例来进行阐述的。他还在实例研究中给出了一些较大规模的实例,并附以整体的分析讨论和详细的逐行注解。贯穿全书的实例和练习都以问题求解为中心,力图培养学生开发可重用组件并用之创建实际项目的意识。
与第2版相比,第3版在文字表达、内容组织、课后练习和附加材料方面都得到了显著改善。
本书特点
 按照逻辑顺序,重新组织了各章的内容和主题,增加了许多有趣的实例,以及引人入胜的课后练习。
 在每一节的开始,以“关键点”的形式说明重要的概念和内容;在每一节的结束,以“检查点”的形式检查学生对于内容的掌握程度。
 第4章就介绍了string类型,以便学生能够尽早使用该类型编写程序。
 列出常见的编程错误和陷阱,让学生避免犯这些错误。


上一版(书号24017)的封二仍作为本版的封二,但注意网址有变化,其中的cpp——cpp3e

作者简介

(美)Y.Daniel Liang 著 阿姆斯特朗亚特兰大州立大学:Y. Daniel Liang 普度大学终身教授,阿姆斯特朗亚特兰大州立大学计算机科学系教授。他所编写的Java教程在美国大学Java课程中采用率极高,同时他还兼任Prentice Hall Java系列丛书的编辑。 加中文版小封面 Java语言程序设计 基础篇(原书第8版) Java语言程序设计 进阶篇(原书第8版) 书号:978-7-111-34081-2 书号:978-7-111-34236-6 定价:75.00元 定价:79.00元

译者简介

刘晓光 李忠伟 任明明 王刚 译:暂无简介

译者序

随着科技的进步和各种辅助工具的层出不穷,软件设计和开发不再是一项令人生畏的艰巨工程。但是熟练的程序设计技巧仍然是必不可少的基础。这是因为,只有通过计算机程序,才能让计算机“理解”人类的意图,进而为人类服务;只有掌握了程序设计的思想和编程技巧,才能与计算机高效地“沟通”。C++语言是在C语言基础上发展起来的,它继承了C语言简洁、高效的特点,同时引入面向对象程序设计的思想,显著提高了程序的可读性和可维护性。因此,近20年来,C++语言一直是使用最广泛的计算机高级程序设计语言之一。
本书的作者梁勇教授(Y. Daniel Liang)是国际知名的计算机教育家和专业书籍作家。多年来他一直坚持从事计算机教学方法改革和教材的撰写工作。目前,梁勇教授已经出版了30多本计算机科学领域的专业教材。特别是,他所编写的Java系列教材,是目前世界上最畅销的Java教材之一,被世界各地很多高等院校广泛采用。除了Java以外,梁教授对于C++语言也有很深刻的认识,本书是他所撰写的 C++教材的第3版。
本书分为三部分。第一部分介绍C++程序设计的基础知识,包括C++基本知识(第1章),如何使用简单数据类型、表达式、运算符等基本的编程技巧(第2章),分支语句(第3章),数学函数、字符及字符串(第4章),循环(第5章),函数(第6章),数组(第7、8章)。第二部分介绍面向对象程序设计,包括使用对象和类进行编程(第9章),设计类(第10章),指针及动态内存管理(第11章),用模板设计通用类(第12章),用I/O类进行文件输入输出(第13章),用运算符简化函数(第14章),由基类定义新类(第15章),使用异常处理创建高可靠性程序(第16章)。第三部分介绍算法与数据结构,包括第17章和第18~26章(这是本书的扩展阅读部分,需要读者从原书网站www.pearsonhighered.com/liang上付费购买),第17章介绍递归以及编写函数解决递归问题,第18章介绍如何评价算法有效性,第19章介绍各种排序算法并分析各自的复杂度,第20章介绍如何设计及实现链表、队列和优先级队列,第21章介绍二分搜索树,第22章和第23章介绍C++的标准模板库,第24章和第25章介绍图算法及其应用,第26章介绍平衡二叉搜索树。
本书的翻译工作是在王刚、刘晓光等人翻译的本书第2版基础上,由刘晓光、李忠伟和任明明具体完成的。受译者能力所限,错漏之处在所难免,敬请读者批评指正。
感谢机械工业出版社华章分社和相关编辑为本书所付出的心血,没有辛苦的编辑和审校,本书不可能完成。

译者
2014年8月于南开园

图书目录

出版者的话
译者序
前言
致读者
第一部分 编程基础
第1章 计算机、程序和C++语言简介 2
1.1 引言 2
1.2 什么是计算机 3
1.2.1 CPU 4
1.2.2 位和字节 4
1.2.3 内存 5
1.2.4 存储设备 5
1.2.5 输入输出设备 6
1.2.6 通信设备 7
1.3 编程语言 8
1.3.1 机器语言 8
1.3.2 汇编语言 9
1.3.3 高级语言 9
1.4 操作系统 10
1.4.1 控制和监视系统活动 11
1.4.2 分配和指派系统资源 11
1.4.3 任务调度 11
1.5 C++语言的历史 11
1.6 一个简单的C++程序 12
1.7 C++程序开发周期 16
1.8 程序风格和文档 18
1.8.1 适当的注释和注释风格 18
1.8.2 正确的缩进和间距 18
1.9 编程错误 19
1.9.1 语法错误 19
1.9.2 运行时错误 19
1.9.3 逻辑错误 20
1.9.4 常见错误 20
关键术语 22
本章小结 22
在线测验 23
程序设计练习 23
第2章 程序设计基础 25
2.1 引言 25
2.2 编写简单的程序 25
2.3 从键盘读取输入 28
2.4 标识符 30
2.5 变量 30
2.6 赋值语句和赋值表达式 32
2.7 命名常量 33
2.8 数值数据类型及其运算 34
2.8.1 数值类型 34
2.8.2 数值文字常量 37
2.8.3 数值运算符 37
2.8.4 指数运算符 38
2.9 算术表达式和运算符优先级 39
2.10 实例研究:显示当前时间 41
2.11 简写运算符 43
2.12 自增、自减运算符 43
2.13 数值类型转换 45
2.14 软件开发流程 47
2.15 实例研究:计算给定金额的货币数量 51
2.16 常见错误 53
关键术语 54
本章小结 55
在线测验 55
程序设计练习 55
第3章 分支语句 60
3.1 引言 60
3.2 bool数据类型 61
3.3 if语句 62
3.4 双分支的if-else语句 64
3.5 嵌套的if语句和多分支的if-else语句 65
3.6 常见错误和陷阱 67
3.7 实例研究:计算身体质量指数 71
3.8 实例研究:计算税款 73
3.9 生成随机数 75
3.10 逻辑运算符 77
3.11 实例研究:确定闰年 81
3.12 实例研究:彩票 82
3.13 switch语句 83
3.14 条件表达式 86
3.15 运算符优先级和结合律 88
3.16 调试 89
关键术语 89
本章小结 90
在线测验 90
程序设计练习 90
第4章 数学函数、字符和字符串 99
4.1 引言 99
4.2 数学函数 100
4.2.1 三角函数 100
4.2.2 指数函数 100
4.2.3 近似函数 101
4.2.4 min、max和abs函数 101
4.2.5 实例研究:计算三角形的角 101
4.3 字符数据类型和操作符 103
4.3.1 ASCII码 103
4.3.2 从键盘读取一个字符 104
4.3.3 特殊字符的转义序列 104
4.3.4 数值类型和字符类型之间的相互转换 105
4.3.5 比较和测试字符 106
4.4 实例研究:生成随机字符 107
4.5 实例研究:猜生日 109
4.6 字符函数 112
4.7 实例研究:十六进制转换为十进制 113
4.8 字符串类型 114
4.8.1 字符串索引和下标操作符 115
4.8.2 连接字符串 116
4.8.3 比较字符串 116
4.8.4 读字符串 116
4.9 实例研究:使用字符串修改彩票程序 118
4.10 格式化控制台输出 119
4.10.1 setprecision(n)操作 120
4.10.2 修改操作 121
4.10.3 showpoint操作 121
4.10.4 setw(width)操作 122
4.10.5 left和right操作 122
4.11 简单的文件输入输出 123
4.11.1 写入文件 124
4.11.2 读取一个文件 125
关键术语 126
本章小结 126
在线测验 127
程序设计练习 127
第5章 循环 132
5.1 引言 132
5.2 while循环 133
5.2.1 实例研究:猜数字 135
5.2.2 循环设计策略 138
5.2.3 实例研究:多道减法测试 138
5.2.4 使用用户的确认控制循环 140
5.2.5 使用标记值控制循环 140
5.2.6 输入和输出重定向 141
5.2.7 从一个文件中读取所有的数据 142
5.3 do-while循环 144
5.4 for循环 145
5.5 使用哪种循环 149
5.6 嵌套循环 150
5.7 最小化数字错误 152
5.8 实例研究 153
5.8.1 求最大公约数 153
5.8.2 预测未来的学费 155
5.8.3 蒙特卡罗模拟 156
5.8.4 十进制转换为十六进制 156
5.9 关键字break和continue 158
5.10 实例研究:检查回文 161
5.11 实例研究:输出素数 163
关键术语 165
本章小结 165
在线测验 166
程序设计练习 166
第6章 函数 176
6.1 引言 176
6.2 函数定义 177
6.3 函数调用 178
6.4 无返回值函数 180
6.5 以传值方式传递参数 183
6.6 模块化代码 184
6.7 函数的重载 186
6.8 函数原型 189
6.9 缺省参数 190
6.10 内联函数 191
6.11 局部、全局和静态局部变量 192
6.11.1 for循环中变量的作用域 194
6.11.2 静态局部变量 194
6.12 以引用方式传递参数 197
6.13 常量引用参数 205
6.14 实例研究:十六进制转换为十进制 205
6.15 函数抽象和逐步求精 207
6.15.1 自顶向下设计 208
6.15.2 自顶向下或自底向上实现 209
6.15.3 实现细节 210
6.15.4 逐步求精的好处 214
关键术语 214
本章小结 215
在线测验 215
程序设计练习 215
第7章 一维数组和C字符串 225
7.1 引言 225
7.2 数组基础 226
7.2.1 声明数组 226
7.2.2 访问数组元素 227
7.2.3 数组初始化语句 228
7.2.4 处理数组 229
7.3 问题:彩票号码 232
7.4 问题:一副纸牌 235
7.5 数组作为函数参数 237
7.6 防止函数修改传递参数的数组 238
7.7 数组作为函数值返回 240
7.8 问题:计算每个字符的出现次数 241
7.9 搜索数组 244
7.9.1 顺序搜索方法 244
7.9.2 二分搜索方法 245
7.10 排序数组 247
7.11 C字符串 249
7.11.1 输入和输出C字符串 249
7.11.2 C字符串函数 250
7.11.3 使用strcpy和strncpy函数复制字符串 251
7.11.4 使用strcat和strncat函数拼接字符串 251
7.11.5 使用strcmp函数比较字符串 252
7.11.6 字符串和数字之间的转换 252
关键术语 253
本章小结 254
在线测验 254
程序设计练习 254
第8章 多维数组 263
8.1 引言 263
8.2 声明二维数组 263
8.3 操作二维数组 264
8.4 二维数组作为函数参数 267
8.5 问题:评定多项选择测试的成绩 268
8.6 问题:找最近邻点对 269
8.7 问题:数独 271
8.8 多维数组 274
8.8.1 问题:每日温度与湿度 275
8.8.2 问题:猜生日 277
本章小结 278
在线测验 278
程序设计练习 278
第二部分 面向对象编程
第9章 对象和类 292
9.1 引言 292
9.2 声明类 292
9.3 例:定义类和创建对象 294
9.4 构造函数 297
9.5 创建及使用对象 298
9.6 类定义和类实现的分离 301
9.7 避免多次包含 303
9.8 类中的内联函数 305
9.9 数据域封装 305
9.10 变量作用域 308
9.11 类抽象和封装 310
关键术语 314
本章小结 314
在线测验 315
程序设计练习 315
第10章 面向对象思想 318
10.1 引言 318
10.2 string类 318
10.2.1 构造一个字符串 319
10.2.2 追加字符串 319
10.2.3 字符串赋值 319
10.2.4 函数at、clear、erase及empty 320
10.2.5 函数length、size、capacity和c_str() 320
10.2.6 字符串比较 321
10.2.7 获取子串 321
10.2.8 字符串搜索 322
10.2.9 字符串插入和替换 322
10.2.10 字符串运算符 323
10.2.11 把数字转换为字符串 324
10.2.12 字符串分割 324
10.2.13 实例研究:字符串替换 324
10.3 对象作为函数参数 327
10.4 对象数组 329
10.5 实例成员和静态成员 331
10.6 只读成员函数 335
10.7 从对象的角度思考 337
10.8 对象合成 342
10.9 实例研究:StackOfIntegers类 344
10.10 类设计准则 346
10.10.1 内聚 346
10.10.2 一致 346
10.10.3 封装 347
10.10.4 清晰 347
10.10.5 完整 347
10.10.6 实例与静态 347
关键术语 348
本章小结 348
在线测验 348
程序设计练习 348
第11章 指针及动态内存管理 353
11.1 引言 353
11.2 指针基础 353
11.3 用typedef定义同义类型 359
11.4 常量指针 359
11.5 数组和指针 360
11.6 函数调用时传递指针参数 363
11.7 从函数中返回指针 367
11.8 有用的数组函数 368
11.9 动态持久内存分配 369
11.10 创建及访问动态对象 373
11.11 this指针 375
11.12 析构函数 376
11.13 实例研究:Course类 379
11.14 拷贝构造函数 382
11.15 自定义拷贝构造函数 384
关键术语 387
本章小结 387
在线测验 388
程序设计练习 388
第12章 模板、向量和栈 393
12.1 引言 393
12.2 模板基础 393
12.3 例:一个通用排序函数 397
12.4 模板类 399
12.5 改进Stack类 405
12.6 C++向量类 407
12.7 用vector类替换数组 410
12.8 实例研究:表达式计算 413
关键术语 417
本章小结 417
在线测验 417
程序设计练习 418
第13章 文件输入输出 424
13.1 引言 424
13.2 文本输入输出 425
13.2.1 向文件中写入数据 425
13.2.2 从文件中读取数据 426
13.2.3 检测文件是否存在 427
13.2.4 检测文件结束 427
13.2.5 让用户输入文件名 429
13.3 格式化输出 430
13.4 函数:getline、get和put 431
13.5 fstream和文件打开模式 434
13.6 检测流状态 435
13.7 二进制输入输出 437
13.7.1 write函数 438
13.7.2 read函数 439
13.7.3 例:二进制数组I/O 440
13.7.4 例:二进制对象I/O 440
13.8 随机访问文件 444
13.9 更新文件 447
关键术语 448
本章小结 448
在线测验 448
程序设计练习 449
第14章 运算符重载 452
14.1 引言 452
14.2 Rational类 453
14.3 运算符函数 458
14.4 重载[]运算符 460
14.5 重载简写运算符 462
14.6 重载一元运算符 462
14.7 重载++和--运算符 463
14.8 友元函数和友元类 464
14.9 重载<<和>>运算符 466
14.10 自动类型转换 468
14.10.1 转换为基本数据类型 468
14.10.2 转换为对象类型 469
14.11 定义重载运算符的非成员函数 469
14.12 带有重载运算符函数的Rational类 470
14.13 重载赋值运算符 477
关键术语 481
本章小结 481
在线测验 481
程序设计练习 481
第15章 继承和多态 484
15.1 引言 484
15.2 基类和派生类 484
15.3 泛型程序设计 492
15.4 构造函数和析构函数 493
15.4.1 调用基类构造函数 493
15.4.2 构造函数链和析构函数链 494
15.5 函数重定义 497
15.6 多态 499
15.7 虚函数和动态绑定 500
15.8 关键字protected 503
15.9 抽象类和纯虚函数 504
15.10 类型转换:static_cast 和 dynamic_cast 512
关键术语 515
本章小结 516
在线测验 516
程序设计练习 517
第16章 异常处理 518
16.1 引言 518
16.2 异常处理概述 518
16.3 异常处理机制的优点 522
16.4 异常类 523
16.5 自定义异常类 527
16.6 多重异常捕获 531
16.7 异常的传播 535
16.8 重抛出异常 537
16.9 异常说明 538
16.10 何时使用异常机制 539
关键术语 540
本章小结 540
在线测验 540
程序设计练习 541
第三部分 算法和数据结构
第17章 递归 544
17.1 引言 544
17.2 例:阶乘 545
17.3 实例研究:斐波那契数 548
17.4 用递归方法求解问题 550
17.5 递归辅助函数 552
17.5.1 选择排序 553
17.5.2 二分搜索 555
17.6 汉诺塔 556
17.7 八皇后问题 559
17.8 递归与循环 561
17.9 尾递归 562
关键术语 563
本章小结 563
在线测验 563
程序设计练习 563
第18章 开发高效的算法
第19章 排序
第20章 链表、队列和优先队列
第21章 二分搜索树
第22章 STL容器
第23章 STL算法
第24章 图及其应用
第25章 加权图及其应用
第26章 平衡二叉树和伸展树
附录
附录A C++关键字 568
附录B ASCII字符集 569
附录C 运算符优先级表 570
附录D 数字系统 572
附录E 位运算 575

教学资源推荐
作者: (美)Y. Daniel Liang 著
作者: 马玉春 李壮 张鲲 黄应红 编著
作者: 苏小红 蒋远 单丽莉 李东 编著
作者: [英]克里斯?布里顿(Chris Britton) 著
参考读物推荐
作者: Rogers Cadenhead
作者: 陈浩 等编著
作者: (美)Steven Holzner