C++面向对象程序设计
作者 : [美]贝赫鲁兹·A. 佛罗赞(Behrouz A.Forouzan) 理查德·F. 吉尔伯格(Richard F. Gilberg) 著
译者 : 江红 余青松 余靖 译
丛书名 : 计算机科学丛书
出版日期 : 2020-06-18
ISBN : 978-7-111-65670-8
定价 : 139.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 691
开本 : 16
原书名 : C++ Programming: An Object-Oriented Approach
原出版社: McGraw-Hill
属性分类: 教材
包含CD : 无CD
绝版 :
图书简介

本书采用C++语言来讲解面向对象编程,在介绍C++语法的基础上,还引入了数据结构、设计模式等内容。全书篇章结构精良、组织有序、概念清晰,围绕教学需求展开内容,程序文档形式一致,为学生日后在学术界和专业领域承担程序设计方面的工作打好了基础。

图书特色

通过C++理解面向对象程序设计,涵盖C++语法、C++新特点、数据结构、STL等

图书前言

本书适用于使用C++语言教授面向对象程序设计的课程。本书还为学生提供了高级的概念,如数据结构和设计模式。完成本书学习的学生将具备学习其他面向对象语言课程、数据结构课程或者设计模式课程的知识储备。
什么是C++语言
C++是从C语言和B语言派生出来的不断演进的程序设计语言。C++语言将结构的思想扩展到类,可以从单个类的定义创建不同的对象,并赋予每个数据元素不同的值。
此外,C++语言采用面向对象语言的思想来模拟现实生活。在现实生活中,我们定义一个类型,然后创建该类型的对象。在C++语言中,我们定义一个类,然后创建该类的对象。C++还包括继承的思想。在继承中,我们可以创建一个类,然后通过扩展定义来创建其他类,就像在现实生活中,可以扩展动物的概念以创建马、牛、狗等概念。
也许C++语言最有意思的部分是多态性。多态性使我们能够编写多个具有相同名称的操作版本,供不同的对象使用。这种实践行为在现实生活中也存在,例如动词“开”(open)的使用。我们可以说开了一家公司,开了一盒罐头,开了一扇门,等等。尽管在这些场景下均使用了“开”这个字,但在不同的对象上引发了不同的动作。
C++的最新功能包括标准模板库(Standard Template Library,STL),它是预定义的复杂对象和可以应用于这些对象上的操作的集合,以及帮助用户更加高效和连贯地解决问题的设计模式。
为什么编写本书
本书包括五个独具特色的目标模块,分别阐述如下。
讲授计算机程序设计
本书可以适用于以C++语言为载体的计算机程序设计的第一门课程。第1~6章就是基于上述目的而设计的。前六章讨论计算机系统和程序语言,同时还讨论C++语法和程序控制的基本知识,例如选择结构和循环结构。第1章到第6章对于使用C++语言学习程序设计而言是必不可少的组成部分。
讲授C++语言的语法
第7~12章是研究面向对象程序设计的基础。虽然第8和9章与C++的面向对象特性没有直接关系,但是我们认为这两章可以在学生理解了第7章讨论的面向对象程序设计的基础知识之后再进行讲授。
呈现C++的新特点
第13~17章讨论第一门或者第二门程序设计课程中通常包含的其他主题,可以按任意顺序进行讲授。
讨论数据结构并介绍STL
第18和19章(在线提供)是数据结构入门知识,它们为学生进一步选修数据结构课程提供知识准备。
介绍设计模式
第20章(在线提供)给出了面向对象程序设计中一些典型问题的简单可行的解决方案,如果不使用设计模式,解决这些问题的方法将更加复杂。第20章通过一系列针对特定问题的标准解决方案,让学生更加深入地洞察面向对象程序设计。虽然设计模式通常在计算机图形学课程中讲授,但我们将其应用于非图形问题,以帮助没有图形程序设计经验的学生更好地掌握它。
课程大纲
本书可以按以下顺序讲授:

附录
本书配套网站提供了在线附录,包括六部分内容。
参考资料
附录A至附录E旨在为学生提供参考资料。学生在学习本书的相应章节时可能需要参考这些附录。
语言知识
附录F和附录G为学生提供有关C++如何准备用于编译的源代码,以及如何在不同的节中处理名称的信息。
高级主题
附录H到附录O讨论了C++语言中新增的一些高级主题。教师可以在课堂上讲授这些内容,或者学生可以将其作为附加信息的来源。
C++11简介
附录P简要概述了在讨论高级主题的附录中没有涉及的有关C++11的主题。
UML简介
本书使用了UML图。附录Q提供了作为面向对象项目设计工具的UML的一般性知识。
位集
当使用C++进行网络编程时,位集(bitset)的概念变得越来越流行。我们在附录R中包含了这个主题。
教师资源
本教程提供了若干附加资源,读者可以在www.mhhe.com/forouzan1e上找到。这些资源包括:知识点测验题,有助于指导教师检验学生对章节内容的理解;判断题和复习题,可以用于进一步测试学生对知识的掌握程度。此外,还提供了知识点测验题、判断题、复习题和思考题的完整答案。最后,提供了授课PPT、文本图像文件和示例程序。
致谢
我们对本书的审阅者深表感谢。在过去几年中,他们的见解和建议对本书的出版影响巨大。按字母顺序,本书的审阅者如下:
Vicki H. Allan,犹他州立大学
Kanad Biswas,德里理工学院
Gary Dickerson,联合学院
Max I. Formitchev,马克西姆斯能源公司
Cynthia C. Fry,贝勒大学
Barbara Guillott,洛杉矶拉斐特CGI的Q&A分析师
Jon Hanrath,伊利诺伊理工学院
David Keathly,北得克萨斯大学
Robert Kramer,扬斯敦州立大学
Kami Makki,拉马尔大学
Christopher J. Mallery,微软首席软件工程主管
Michael L. Mick,加州普渡大学
Amar Raheja,加利福尼亚州立理工大学
Brendan Sheehan,内华达大学雷诺分校
我们还要感谢McGraw-Hill的编辑和制作人员:Thomas Scaife(高级投资组合经理);Suzy Banbridge(执行投资组合经理);Heather Ervolino(产品开发人员);Shannon O'Donnell(营销经理);Patrick Diller(业务项目经理);Jane Mohr(内容项目经理)。

上架指导

计算机\程序设计

封底文字

本书使用C++语言介绍面向对象程序设计。通过学习C++语言的语法以及数据结构、标准模板库(STL)等高级概念,帮助读者掌握面向对象编程的相关内容。全书篇章结构精良、组织有序、概念清晰、代码规范,既适合作为第一门程序设计课程的教材,也适合编程初学者参考。
通过本书你将了解
程序设计知识。涵盖计算机系统和程序语言,以及C++语法和程序控制的基本知识,如表达式、语句、选择结构、循环结构和函数等。
C++的语法。包含类、数组、指针、字符串和多态性等内容,为研究面向对象程序设计打下坚实基础。
C++的新特点。包含运算符重载、异常处理、模板、输入/输出流和递归,均为第一或第二门程序设计课程中通常包含的主题。
数据结构和STL。提供数据结构和STL的入门知识,为学生选修后续课程做好准备。
设计模式。讨论一些经典问题及简单可行的解决方案,帮助读者更加深入地理解面向对象程序设计。
作者简介
贝赫鲁兹·A. 佛罗赞(Behrouz A. Forouzan) 德安扎学院荣休教授,主导了计算机信息系统专业的课程建设。此外,他还是多家公司的系统开发咨询顾问。除本书外,他还著有Foundations of Computer Science、Computer Networks: A Top-Down Approach和Data Communications and Networking等畅销书籍。
理查德·F. 吉尔伯格(Richard F. Gilberg) 德安扎学院退休教授,主要讲授计算机编程、数据结构和Web开发课程。在加入德安扎学院之前,他曾在一家大型航空航天公司担任程序员、分析师和经理。
译者简介
江红 华东师范大学副教授,博士。1994年毕业于复旦大学计算机系。曾荣获上海市教学成果一等奖、华东师范大学教学成果一等奖、华东师范大学优秀任课教师奖等荣誉。
余青松 华东师范大学高级工程师。1990年毕业于华东师范大学并留校任教。编著计算机相关教材30余本,在国内外学术期刊和学术会议上发表科技论文近百篇。

作者简介

[美]贝赫鲁兹·A. 佛罗赞(Behrouz A.Forouzan) 理查德·F. 吉尔伯格(Richard F. Gilberg) 著:---作者简介---
贝赫鲁兹·A. 佛罗赞(Behrouz A. Forouzan) 德安扎学院荣休教授,主导了计算机信息系统专业的课程建设。此外,他还是多家公司的系统开发咨询顾问。除本书外,他还著有Foundations of Computer ScienceComputer Networks: A Top-Down ApproachData Communications and Networking等畅销书籍。

理查德·F. 吉尔伯格(Richard F. Gilberg) 德安扎学院退休教授,主要讲授计算机编程、数据结构和Web开发课程。在加入德安扎学院之前,他曾在一家大型航空航天公司担任程序员、分析师和经理。

---译者简介---
江红 华东师范大学副教授,博士。1994年毕业于复旦大学计算机系。曾荣获上海市教学成果一等奖、华东师范大学教学成果一等奖、华东师范大学优秀任课教师奖等荣誉。

余青松 华东师范大学高级工程师。1990年毕业于华东师范大学并留校任教。编著计算机相关教材30余本,在国内外学术期刊和学术会议上发表科技论文近百篇。

译者序

C++是从C语言和B语言派生出来的不断演进的程序设计语言,它是一种面向对象的程序设计语言,支持类、封装、继承、多态等特性。C++语言灵活,运算符的数据结构丰富,具有结构化控制语句,程序执行效率高,而且同时具有高级语言与汇编语言的优点。C++应用非常广泛,常用于系统开发、引擎开发等应用领域。C++是大学计算机编程语言以及课程设计的首选程序设计语言之一。
本书是美国麦格劳-希尔教育(McGraw-Hill Education)出版公司出版的,其特色是,针对复杂的C++语言将教学内容划分为五个独立且关联的目标模块:讲授计算机程序设计;讲授C++语言的语法;呈现C++的新特点;讨论数据结构并介绍STL;介绍面向对象程序设计的设计模式。读者可以根据课程设计的目标和课时安排,灵活有效地进行学习或组织教学内容。
系统、深入地掌握一门计算机程序设计语言是信息化时代的必由之路。本书在世界各地广泛使用,通过该书,读者可以快速有效地掌握C++程序设计语言,开启信息化的大门。
本书由华东师范大学江红、余青松和余靖共同翻译。衷心感谢机械工业出版社的曲熠老师,她积极帮我们筹划翻译事宜并认真审阅译稿。翻译也是一种再创造,同样需要艰辛的付出,感谢朋友、家人以及同事的理解和支持。感谢我们的研究生刘映君、余嘉昊、刘康、钟善豪、方宇雄、唐文芳、许柯嘉等对本译稿的认真通读和指正。在本书翻译的过程中我们力求忠于原著,但由于时间和译者学识有限,故书中的不足之处在所难免,敬请诸位同行、专家和读者指正。

江红 余青松 余靖
2019年12月

图书目录

出版者的话
译者序
前言
第1章 计算机与程序设计语言导论 1
1.1 计算机系统 1
1.1.1 计算机硬件 1
1.1.2 计算机软件 4
1.2 计算机语言 4
1.2.1 机器语言 4
1.2.2 符号语言 5
1.2.3 高级语言 5
1.3 计算机语言范式 5
1.3.1 面向过程的程序设计语言范式 6
1.3.2 面向对象的程序设计语言范式 7
1.3.3 函数式程序设计语言范式 7
1.3.4 逻辑式程序设计语言范式 8
1.3.5 C++语言中包含的范式 8
1.4 程序设计 8
1.4.1 理解问题 9
1.4.2 开发解决方案 9
1.5 程序开发 11
1.5.1 编写和编辑程序 11
1.5.2 编译程序 12
1.5.3 链接程序 12
1.5.4 执行程序 12
1.6 测试 12
1.6.1 设计测试数据 12
1.6.2 程序错误 13
本章小结 13
思考题 14
第2章 C++程序设计基础 16
2.1 C++程序 16
2.1.1 第一个程序 16
2.1.2 第二个程序 20
2.2 变量、值和常量 22
2.2.1 变量 22
2.2.2 值 22
2.2.3 常量 26
2.3 C++程序的组成部分 26
2.3.1 标记符 27
2.3.2 注释 29
2.4 数据类型 30
2.4.1 整数类型 30
2.4.2 字符类型 36
2.4.3 布尔类型 38
2.4.4 浮点类型 39
2.4.5 void类型 40
2.4.6 字符串类 41
本章小结 42
思考题 42
编程题 47
第3章 表达式和语句 48
3.1 表达式 48
3.1.1 基本表达式 49
3.1.2 一元表达式 51
3.1.3 乘法类表达式 52
3.1.4 加法类表达式 54
3.1.5 赋值表达式 55
3.1.6 左值和右值的概念 57
3.2 类型转换 57
3.2.1 隐式类型转换 58
3.2.2 显式类型转换(强制转换) 61
3.3 表达式的求值顺序 62
3.3.1 优先级 62
3.3.2 结合性 65
3.4 上溢和下溢 66
3.4.1 整数的上溢和下溢 66
3.4.2 浮点数的上溢和下溢 68
3.5 格式化数据 69
3.5.1 用于输出的操作符 69
3.5.2 用于输入的操作符 74
3.6 语句 75
3.6.1 声明语句 76
3.6.2 表达式语句 77
3.6.3 空语句 78
3.6.4 复合语句 78
3.6.5 返回语句 79
3.7 程序设计 80
3.7.1 提取浮点数的整数部分和小数部分 80
3.7.2 提取整数的个位数 82
3.7.3 把时间分解为时分秒 83
3.7.4 计算平均值和偏差 84
本章小结 86
思考题 86
编程题 90
第4章 选择结构 92
4.1 简单选择结构 92
4.1.1 关系和等性表达式 92
4.1.2 单分支选择结构:if语句 93
4.1.3 双分支选择结构:if-else语句 97
4.1.4 多分支选择结构 101
4.2 复杂条件决策 103
4.2.1 逻辑表达式 104
4.2.2 逻辑表达式的应用 105
4.3 基于特定值的选择结构 111
4.3.1 switch语句 111
4.4 条件表达式 117
4.4.1 条件表达式的结构 117
4.4.2 比较 118
4.5 程序设计 119
4.5.1 学生成绩 119
4.5.2 计算给定收入的税款 122
4.5.3 日期编号 124
本章小结 126
思考题 126
编程题 128
第5章 循环结构 130
5.1 概述 130
5.1.1 前缀表达式和后缀表达式 130
5.1.2 循环语句 132
5.2 while语句 132
5.2.1 计数器控制while语句 133
5.2.2 事件控制while语句 138
5.2.3 while语句分析 144
5.3 for语句 144
5.3.1 循环头 145
5.3.2 循环体 145
5.4 do-while语句 148
5.4.1 事件控制的循环结构 149
5.4.2 do-while循环结构的分析 151
5.5 有关循环结构的详细信息 152
5.5.1 三种循环结构的比较 152
5.5.2 嵌套循环 152
5.6 其他相关语句 155
5.6.1 return语句 155
5.6.2 break语句 157
5.6.3 continue语句 157
5.6.4 goto语句 158
5.7 程序设计 158
5.7.1 累加和与累乘积 158
5.7.2 阶乘 160
5.7.3 乘幂 162
5.7.4 最小值和最大值 164
5.7.5 any或者all查询 166
本章小结 168
思考题 169
编程题 171
第6章 函数 173
6.1 概述 173
6.1.1 函数的优点 174
6.1.2 函数的定义、声明和调用 174
6.1.3 库函数和用户自定义函数 176
6.2 库函数 177
6.2.1 数学函数 177
6.2.2 字符函数 181
6.2.3 处理时间 183
6.2.4 随机数生成 184
6.3 用户自定义函数 186
6.3.1 函数的四种类型 186
6.3.2 使用声明 192
6.4 数据交换 194
6.4.1 传递数据 195
6.4.2 返回值 199
6.4.3 综合示例 200
6.5 有关参数的进一步讨论 203
6.5.1 默认参数 203
6.5.2 函数重载 204
6.6 作用域和生命周期 206
6.6.1 作用域 206
6.6.2 生命周期 211
6.7 程序设计 213
6.7.1 固定投资的未来价值 214
6.7.2 周期性投资的未来价值 217
本章小结 221
思考题 221
编程题 224
第7章 用户自定义类型:类 227
7.1 概述 227
7.1.1 现实生活中的类型和实例 227
7.1.2 程序中的类和对象 228
7.1.3 比较 228
7.2 类 229
7.2.1 一个示例 229
7.2.2 类定义 231
7.2.3 成员函数定义 233
7.2.4 内联函数 234
7.2.5 应用程序 235
7.2.6 结构 235
7.3 构造函数和析构函数 236
7.3.1 构造函数 236
7.3.2 析构函数 238
7.3.3 创建和销毁对象 239
7.3.4 必需的成员函数 239
7.4 实例成员 245
7.4.1 实例数据成员 245
7.4.2 实例成员函数 245
7.4.3 类不变式 249
7.5 静态成员 252
7.5.1 静态数据成员 252
7.5.2 静态成员函数 253
7.6 面向对象的程序设计 259
7.6.1 独立文件 259
7.6.2 独立编译 260
7.6.3 防止多重包含 265
7.6.4 封装 265
7.7 设计类 266
7.7.1 表示分数的类 267
7.7.2 表示时间的类 272
本章小结 276
思考题 276
编程题 278
第8章 数组 281
8.1 一维数组 281
8.1.1 数组属性 281
8.1.2 声明、分配和初始化 282
8.1.3 访问数组元素 284
8.2 有关数组的进一步讨论 290
8.2.1 访问操作 290
8.2.2 修改操作 293
8.2.3 使用带数组的函数 295
8.2.4 并行数组 298
8.3 多维数组 302
8.3.1 二维数组 302
8.3.2 三维数组 306
8.4 程序设计 307
8.4.1 频率数组和直方图 307
8.4.2 线性转换 309
本章小结 312
思考题 313
编程题 314
第9章 引用、指针和内存管理 316
9.1 引用 316
9.1.1 概述 316
9.1.2 检索值 318
9.1.3 修改值 319
9.1.4 引用的应用 320
9.2 指针 325
9.2.1 地址 325
9.2.2 指针类型和指针变量 327
9.2.3 检索值 329
9.2.4 使用const修饰符 329
9.2.5 指向指针的指针 331
9.2.6 两种特殊的指针 331
9.2.7 指针的应用 332
9.3 数组和指针 336
9.3.1 一维数组和指针 336
9.3.2 二维数组和指针 342
9.4 内存管理 344
9.4.1 代码内存 344
9.4.2 静态内存 344
9.4.3 栈内存 345
9.4.4 堆内存 346
9.4.5 二维数组 349
9.5 程序设计 352
9.5.1 课程类 352
9.5.2 矩阵类 357
本章小结 362
思考题 362
编程题 366
第10章 字符串 368
10.1 C字符串 368
10.1.1 C字符串库 369
10.1.2 C字符串的操作 369
10.2 C++字符串类 381
10.2.1 总体设计思路 382
10.2.2 C++字符串库 383
10.2.3 C++字符串定义的操作 384
10.3 程序设计 402
10.3.1 四个自定义函数 402
10.3.2 数值进制编码系统的转换 404
本章小结 409
思考题 409
编程题 410
第11章 类之间的关系 412
11.1 继承关系 412
11.1.1 总体思路 412
11.1.2 公共继承 413
11.1.3 有关公共继承的进一步讨论 424
11.1.4 继承的三种类型 430
11.2 关联关系 431
11.2.1 聚合关系 432
11.2.2 组合关系 435
11.3 依赖关系 438
11.3.1 UML图 439
11.3.2 一个综合的示例 439
11.4 程序设计 443
11.4.1 词法分析器类 443
11.4.2 注册 446
本章小结 454
思考题 455
编程题 457
第12章 多态性和其他问题 460
12.1 多态性 460
12.1.1 多态性的条件 461
12.1.2 构造函数和析构函数 464
12.1.3 绑定 470
12.1.4 运行时类型信息 471
12.2 其他问题 472
12.2.1 抽象类 472
12.2.2 多重继承 482
本章小结 494
思考题 494
编程题 495
第13章 运算符重载 497
13.1 对象的三种角色 497
13.1.1 宿主对象 497
13.1.2 参数对象 499
13.1.3 返回对象 500
13.2 重载原理 501
13.2.1 运算符的三种类别 502
13.2.2 重载的规则 503
13.2.3 运算符函数 504
13.3 重载为成员函数 504
13.3.1 一元运算符 504
13.3.2 二元运算符 507
13.3.3 其他运算符 511
13.4 重载为非成员函数 517
13.4.1 二元算术运算符 517
13.4.2 等性运算符和关系运算符 518
13.4.3 提取运算符和插入运算符 519
13.5 类型转换 520
13.5.1 基本类型转换为类类型 520
13.5.2 类类型转换为基本类型 521
13.6 设计类 521
13.6.1 带重载运算符的Fraction类 521
13.6.2 Date类 530
13.6.3 多项式 536
本章小结 543
思考题 543
编程题 544
第14章 异常处理 546
14.1 概述 546
14.1.1 错误处理的传统方法 546
14.1.2 异常处理的方法 551
14.1.3 异常规范 558
14.1.4 栈展开 559
14.2 类中的异常 560
14.2.1 构造函数中的异常 561
14.2.2 析构函数中的异常 567
14.3 标准异常类 567
14.3.1 逻辑错误 568
14.3.2 运行时错误 569
14.3.3 其他五个类 570
14.3.4 使用标准异常类 571
本章小结 572
思考题 572
编程题 575
第15章 泛型编程:模板 576
15.1 函数模板 576
15.1.1 使用函数族 576
15.1.2 使用函数模板 577
15.1.3 其他函数模板版本 580
15.1.4 接口文件和应用程序文件 583
15.2 类模板 584
15.2.1 接口和实现 584
15.2.2 编译 587
15.2.3 其他问题 591
15.2.4 继承 592
15.2.5 回顾 592
本章小结 593
思考题 593
编程题 594
第16章 输入/输出流 595
16.1 概述 595
16.1.1 流 596
16.1.2 数据表示 596
16.1.3 流类 598
16.2 控制台流 599
16.2.1 控制台对象 599
16.2.2 流状态 600
16.2.3 输入/输出 602
16.3 文件流 606
16.3.1 文件输入/输出 606
16.3.2 文件打开模式 609
16.3.3 其他成员函数 614
16.3.4 顺序访问与随机访问 616
16.3.5 二进制输入/输出 619
16.4 字符串流 625
16.4.1 实例化 626
16.4.2 应用:适配器 627
16.5 格式化数据 629
16.5.1 直接使用标志、字段和变量 629
16.5.2 预定义操作符 632
16.5.3 操作符定义 634
16.6 程序设计 638
16.6.1 合并两个已排序文件 638
16.6.2 对称密码 640
本章小结 644
思考题 645
编程题 645
第17章 递归 647
17.1 概述 647
17.1.1 循环与递归 647
17.1.2 递归算法 649
17.1.3 尾部递归函数和非尾部递归函数 657
17.1.4 辅助函数 658
17.2 递归排序和查找 660
17.2.1 快速排序 660
17.2.2 二分查找法 664
17.2.3 汉诺塔 667
17.3 程序设计 670
17.3.1 字符串排列 670
17.3.2 素数 672
本章小结 675
思考题 675
编程题 677
在线章节
第18章 数据结构入门
第19章 标准模板库
第20章 设计模式
附录A Unicode
附录B 进制编码系统
附录C C++表达式和运算符
附录D 位运算
附录E 位域
附录F 预处理
附录G 名称空间
附录H 比率
附录I 时间
附录J Lambda表达式
附录K 正则表达式
附录L 智能指针
附录M 随机数生成
附录N 引用
附录O 移动与复制
附录P C++11概述
附录Q 统一建模语言
附录R 位集

教学资源推荐
作者: Harvey M.Deitel,Paul J.Deitel
作者: 施霞萍 张欢欢 王瑾德 马可幸
作者: [美] 尤金尼·E.米哈伊洛夫(Eugeniy E. Mikhailov) 著
作者: [印度]K.G.斯里尼瓦沙(K.G.Srinivasa) 阿尼尔·库马尔·穆帕拉(Anil Kumar Muppalla) 著
参考读物推荐
作者: Marc Wandschneider
作者: (美) Piero Giacomelli 著
作者: [美] 亚历山大 A. 斯捷潘诺夫(Alexander A. Stepanov) 丹尼尔 E.罗斯(Daniel E. Rose)著