编辑推荐
《计算机科学丛书:C++程序设计(原书第3版)》保持了Liang博士系列丛书中一贯的标志性的教与学的哲学:以实例教,由实践学。通过使用他所提出的已经经过实践检验的“基础先行”的方法,Liang博士在本书中通过大量实例阐明了基本的C++特性,使得学生可以通过实践来更有效地进行学习。
《计算机科学丛书:C++程序设计(原书第3版)》首先帮助学生循序渐进地学习所有必需和重要的基本概念,然后再进入面向对象程序设计方法的学习,最终掌握构建具有异常处理和输入输出功能的有意义的应用程序的方法。基本概念都是使用简短且吸引人的实例来进行阐述的。他还在实例研究中给出了一些较大规模的实例,并附以整体的分析讨论和详细的逐行注解。贯穿全书的实例和练习都以问题求解为中心,力图培养学生开发可重用组件并用之创建实际项目的意识。
与第2版相比,第3版在文字表达、内容组织、课后练习和附加材料方面都得到了显著改善。
第3版有以下创新特色:
按照逻辑顺序,重新组织了各章的内容和主题,增加了许多有趣的实例,以及引人入胜的课后练习。
在每一节的开始,以“关键点”的形式说明重要的概念和内容;在每一节的结束,以“检查点”的形式检查学生对于内容的掌握程度。
第4章就介绍了string类型,以便学生能够尽早使用该类型编写程序。
列出常见的编程错误和陷阱,让学生避免犯这些错误。
内容简介
《计算机科学丛书:C++程序设计(原书第3版)》采用“问题驱动”、“基础先行”和“实例和实践相结合”的方式,阐明了基本的C++特性。《计算机科学丛书:C++程序设计(原书第3版)》共分为三部分,第一部分介绍C++程序设计的基本概念,第二部分介绍面向对象程序设计方法,第三部分介绍算法与数据结构方面的内容。为了帮助学生更好地掌握相关知识,《计算机科学丛书:C++程序设计(原书第3版)》每章都包括以下模块:目标,引言,关键点,检查点,问题和实例研究,本章小结,在线测验,程序设计练习,提示、小窍门、警示和教学提示。
《计算机科学丛书:C++程序设计(原书第3版)》可以作为高等院校计算机及相关专业C++程序设计课程的教材,也可以作为C++程序设计的自学参考书。
作者简介
Y. Daniel Liang,普度大学终身教授,阿姆斯特朗亚特兰大州立大学计算机科学系教授。他所编写的Java教程在美国大学Java课程中采用率最高,同时他还兼任Prentice Hall Java系列丛书的编辑。
内页插图
目录
出版者的话
译者序
前言
致读者
第一部分 编程基础
第1章 计算机、程序和C++语言简介
1.1 引言
1.2 什么是计算机
1.2.1 CPU
1.2.2 位和字节
1.2.3 内存
1.2.4 存储设备
1.2.5 输入输出设备
1.2.6 通信设备
1.3 编程语言
1.3.1 机器语言
1.3.2 汇编语言
1.3.3 高级语言
1.4 操作系统
1.4.1 控制和监视系统活动
1.4.2 分配和指派系统资源
1.4.3 任务调度
1.5 C++语言的历史
1.6 一个简单的C++程序
1.7 C++程序开发周期
1.8 程序风格和文档
1.8.1 适当的注释和注释风格
1.8.2 正确的缩进和间距
1.9 编程错误
1.9.1 语法错误
1.9.2 运行时错误
1.9.3 逻辑错误
1.9.4 常见错误
关键术语
本章小结
在线测验
程序设计练习
第2章 程序设计基础
2.1 引言
2.2 编写简单的程序
2.3 从键盘读取输入
2.4 标识符
2.5 变量
2.6 赋值语句和赋值表达式
2.7 命名常量
2.8 数值数据类型及其运算
2.8.1 数值类型
2.8.2 数值文字常量
2.8.3 数值运算符
2.8.4 指数运算符
2.9 算术表达式和运算符优先级
2.10 实例研究:显示当前时间
2.11 简写运算符
2.12 自增、自减运算符
2.13 数值类型转换
2.14 软件开发流程
2.15 实例研究:计算给定金额的货币数量
2.16 常见错误
关键术语
本章小结
在线测验
程序设计练习
第3章 分支语句
3.1 引言
3.2 bool数据类型
3.3 if语句
3.4 双分支的if-else语句
3.5 嵌套的if语句和多分支的if-else语句
3.6 常见错误和陷阱
3.7 实例研究:计算身体质量指数
3.8 实例研究:计算税款
3.9 生成随机数
3.10 逻辑运算符
3.11 实例研究:确定闰年
3.12 实例研究:彩票
3.13 switch语句
3.14 条件表达式
3.15 运算符优先级和结合律
3.16 调试
关键术语
本章小结
在线测验
程序设计练习
第4章 数学函数、字符和字符串
4.1 引言
4.2 数学函数
4.2.1 三角函数
4.2.2 指数函数
4.2.3 近似函数
4.2.4 min、max和abs函数
4.2.5 实例研究:计算三角形的角
4.3 字符数据类型和操作符
4.3.1 ASCII码
4.3.2 从键盘读取一个字符
4.3.3 特殊字符的转义序列
4.3.4 数值类型和字符类型之间的相互转换
4.3.5 比较和测试字符
4.4 实例研究:生成随机字符
4.5 实例研究:猜生日
4.6 字符函数
4.7 实例研究:十六进制转换为十进制
4.8 字符串类型
4.8.1 字符串索引和下标操作符
4.8.2 连接字符串
4.8.3 比较字符串
4.8.4 读字符串
4.9 实例研究:使用字符串修改彩票程序
4.10 格式化控制台输出
4.10.1 setprecision(n)操作
4.10.2 修改操作
4.10.3 showpoint操作
4.10.4 setw(width)操作
4.10.5 left和right操作
4.11 简单的文件输入输出
4.11.1 写入文件
4.11.2 读取一个文件
关键术语
本章小结
在线测验
程序设计练习
第5章 循环
5.1 引言
5.2 while循环
5.2.1 实例研究:猜数字
5.2.2 循环设计策略
5.2.3 实例研究:多道减法测试
5.2.4 使用用户的确认控制循环
5.2.5 使用标记值控制循环
5.2.6 输入和输出重定向
5.2.7 从一个文件中读取所有的数据
5.3 do-while循环
5.4 for循环
5.5 使用哪种循环
5.6 嵌套循环
5.7 最小化数字错误
5.8 实例研究
5.8.1 求最大公约数
5.8.2 预测未来的学费
5.8.3 蒙特卡罗模拟
5.8.4 十进制转换为十六进制
5.9 关键字break和continue
5.10 实例研究:检查回文
5.11 实例研究:输出素数
关键术语
本章小结
在线测验
程序设计练习
第6章 函数
6.1 引言
6.2 函数定义
6.3 函数调用
6.4 无返回值函数
6.5 以传值方式传递参数
6.6 模块化代码
6.7 函数的重载
6.8 函数原型
6.9 缺省参数
6.10 内联函数
6.11 局部、全局和静态局部变量
6.11.1 for循环中变量的作用域
6.11.2 静态局部变量
6.12 以引用方式传递参数
6.13 常量引用参数
6.14 实例研究:十六进制转换为十进制
6.15 函数抽象和逐步求精
6.15.1 自顶向下设计
6.15.2 自顶向下或自底向上实现
6.15.3 实现细节
6.15.4 逐步求精的好处
关键术语
本章小结
在线测验
程序设计练习
第7章 一维数组和C字符串
7.1 引言
7.2 数组基础
7.2.1 声明数组
7.2.2 访问数组元素
7.2.3 数组初始化语句
7.2.4 处理数组
7.3 问题:彩票号码
7.4 问题:一副纸牌
7.5 数组作为函数参数
7.6 防止函数修改传递参数的数组
7.7 数组作为函数值返回
7.8 问题:计算每个字符的出现次数
7.9 搜索数组
7.9.1 顺序搜索方法
7.9.2 二分搜索方法
7.10 排序数组
7.11 C字符串
7.11.1 输入和输出C字符串
7.11.2 C字符串函数
7.11.3 使用strcpy和strncpy函数复制字符串
7.11.4 使用strcat和strncat函数拼接字符串
7.11.5 使用strcmp函数比较字符串
7.11.6 字符串和数字之间的转换
关键术语
本章小结
在线测验
程序设计练习
第8章 多维数组
8.1 引言
8.2 声明二维数组
8.3 操作二维数组
8.4 二维数组作为函数参数
8.5 问题:评定多项选择测试的成绩
8.6 问题:找最近邻点对
8.7 问题:数独
8.8 多维数组
8.8.1 问题:每日温度与湿度
8.8.2 问题:猜生日
本章小结
在线测验
程序设计练习
第二部分 面向对象编程
第9章 对象和类
9.1 引言
9.2 声明类
9.3 例:定义类和创建对象
9.4 构造函数
9.5 创建及使用对象
9.6 类定义和类实现的分离
9.7 避免多次包含
9.8 类中的内联函数
9.9 数据域封装
9.10 变量作用域
9.11 类抽象和封装
关键术语
本章小结
在线测验
程序设计练习
第10章 面向对象思想
10.1 引言
10.2 string类
10.2.1 构造一个字符串
10.2.2 追加字符串
10.2.3 字符串赋值
10.2.4 函数at、clear、erase及empty
10.2.5 函数length、size、capacity和c_str()
10.2.6 字符串比较
10.2.7 获取子串
10.2.8 字符串搜索
10.2.9 字符串插入和替换
10.2.10 字符串运算符
10.2.11 把数字转换为字符串
10.2.12 字符串分割
10.2.13 实例研究:字符串替换
10.3 对象作为函数参数
10.4 对象数组
10.5 实例成员和静态成员
10.6 只读成员函数
10.7 从对象的角度思考
10.8 对象合成
10.9 实例研究:StackOfIntegers类
10.10 类设计准则
10.10.1 内聚
10.10.2 一致
10.10.3 封装
10.10.4 清晰
10.10.5 完整
10.10.6 实例与静态
关键术语
本章小结
在线测验
程序设计练习
第11章 指针及动态内存管理
11.1 引言
11.2 指针基础
11.3 用typedef定义同义类型
11.4 常量指针
11.5 数组和指针
11.6 函数调用时传递指针参数
11.7 从函数中返回指针
11.8 有用的数组函数
11.9 动态持久内存分配
11.10 创建及访问动态对象
11.11 this指针
11.12 析构函数
11.13 实例研究:Course类
11.14 拷贝构造函数
11.15 自定义拷贝构造函数
关键术语
本章小结
在线测验
程序设计练习
第12章 模板、向量和栈
12.1 引言
12.2 模板基础
12.3 例:一个通用排序函数
12.4 模板类
12.5 改进Stack类
12.6 C++向量类
12.7 用vector类替换数组
12.8 实例研究:表达式计算
关键术语
本章小结
在线测验
程序设计练习
第13章 文件输入输出
13.1 引言
13.2 文本输入输出
13.2.1 向文件中写入数据
13.2.2 从文件中读取数据
13.2.3 检测文件是否存在
13.2.4 检测文件结束
13.2.5 让用户输入文件名
13.3 格式化输出
13.4 函数:getline、get和put
13.5 fstream和文件打开模式
13.6 检测流状态
13.7 二进制输入输出
13.7.1 write函数
13.7.2 read函数
13.7.3 例:二进制数组I/O
13.7.4 例:二进制对象I/O
13.8 随机访问文件
13.9 更新文件
关键术语
本章小结
在线测验
程序设计练习
第14章 运算符重载
14.1 引言
14.2 Rational类
14.3 运算符函数
14.4 重载[]运算符
14.5 重载简写运算符
14.6 重载一元运算符
14.7 重载++和——运算符
14.8 友元函数和友元类
14.9 重载<<和>>运算符
14.10 自动类型转换
14.10.1 转换为基本数据类型
14.10.2 转换为对象类型
14.11 定义重载运算符的非成员函数
14.12 带有重载运算符函数的Rational类
14.13 重载赋值运算符
关键术语
本章小结
在线测验
程序设计练习
第15章 继承和多态
15.1 引言
15.2 基类和派生类
15.3 泛型程序设计
15.4 构造函数和析构函数
15.4.1 调用基类构造函数
15.4.2 构造函数链和析构函数链
15.5 函数重定义
15.6 多态
15.7 虚函数和动态绑定
15.8 关键字protected
15.9 抽象类和纯虚函数
15.10 类型转换:static_cast 和 dynamic_cast
关键术语
本章小结
在线测验
程序设计练习
第16章 异常处理
16.1 引言
16.2 异常处理概述
16.3 异常处理机制的优点
16.4 异常类
16.5 自定义异常类
16.6 多重异常捕获
16.7 异常的传播
16.8 重抛出异常
16.9 异常说明
16.10 何时使用异常机制
关键术语
本章小结
在线测验
程序设计练习
第三部分 算法和数据结构
第17章 递归
17.1 引言
17.2 例:阶乘
17.3 实例研究:斐波那契数
17.4 用递归方法求解问题
17.5 递归辅助函数
17.5.1 选择排序
17.5.2 二分搜索
17.6 汉诺塔
17.7 八皇后问题
17.8 递归与循环
17.9 尾递归
关键术语
本章小结
在线测验
程序设计练习
第18章 开发高效的算法
第19章 排序
第20章 链表、队列和优先队列
第21章 二分搜索树
第22章 STL容器
第23章 STL算法
第24章 图及其应用
第25章 加权图及其应用
第26章 平衡二叉树和伸展树
附录
附录A C++关键字
附录B ASCII字符集
附录C 运算符优先级表
附录D 数字系统
附录E 位运算
前言/序言
《C++程序设计(原书第3版)》:一本深入探索现代C++编程艺术的经典之作 在飞速发展的计算机科学领域,C++语言以其强大的性能、灵活的抽象能力和跨平台的特性,始终占据着举足轻重的地位。从操作系统内核到高性能游戏引擎,从嵌入式系统到金融交易平台,C++的身影无处不在。而对于每一个渴望掌握这门强大语言的开发者而言,一本权威、深入且与时俱进的教材是必不可少的。 《C++程序设计(原书第3版)》正是这样一本杰出的著作,它不仅全面覆盖了C++语言的核心概念和高级特性,更以前瞻性的视角,引领读者进入现代C++编程的广阔天地。 本书不同于市面上许多泛泛而谈的入门教程,它以严谨的逻辑、清晰的结构和丰富的实例,旨在为读者构建坚实的C++理论基础,并培养解决实际问题的编程思维。无论您是初次接触C++的编程爱好者,还是希望深化对C++理解的资深开发者,抑或是计算机科学专业的学生,本书都将是您宝贵的学习伙伴。 一、 奠定坚实基础:从核心概念到语言精髓 本书的开篇,作者并未急于展示复杂的语法,而是以一种循序渐进的方式,带领读者领略C++语言的魅力。首先,它清晰地阐述了程序设计的基本思想,包括算法、数据结构以及如何将现实世界的问题转化为计算机可以理解和执行的代码。在这里,您将学习到变量、数据类型、运算符、表达式以及控制流语句(如`if`、`else`、`for`、`while`),这些都是构建任何程序的基础。 接着,本书深入讲解了C++的核心特性。函数的概念被细致地解析,包括函数的声明、定义、参数传递(传值与传引用)以及返回值,帮助读者理解代码的模块化和重用性。数组和指针是C++中最具代表性也最容易引起混淆的概念之一,本书以大量图示和实例,生动形象地解释了它们的工作原理,以及如何利用指针进行高效的内存管理和数据访问。读者将学会如何声明、初始化和操作数组,如何通过指针直接访问内存地址,以及指针在动态内存分配中的关键作用。 面向对象编程(OOP)是C++的灵魂所在,本书对此进行了详尽的阐述。类(class)和对象(object)的概念被清晰地定义,读者将学习如何设计和实现自己的类,包括数据成员(属性)和成员函数(方法)。封装、继承和多态这OOP的三大支柱,本书都给予了深刻的解读。通过封装,读者将学会如何保护数据,如何通过公共接口与外部交互;通过继承,读者将理解如何构建类层次结构,实现代码的复用和扩展;而通过多态,读者将领略到面向对象设计的强大灵活性,以及如何编写更加通用和可维护的代码。 二、 深入现代C++:拥抱高效与优雅 《C++程序设计(原书第3版)》的价值远不止于此,它更重要的贡献在于,它将读者带入了现代C++的范畴。本书紧跟C++标准的发展,重点介绍了C++11、C++14、C++17等新标准带来的诸多革新,这些新特性极大地提升了C++的开发效率、安全性和表达能力。 智能指针:在C++中,手动管理内存是一项繁琐且容易出错的任务。本书深入介绍了`std::unique_ptr`、`std::shared_ptr`和`std::weak_ptr`等智能指针,它们能够自动管理内存的生命周期,有效避免内存泄漏和悬挂指针的问题,是现代C++开发中不可或缺的工具。 Lambda表达式:Lambda表达式提供了一种简洁的方式来定义匿名函数,这在很多场景下可以大大简化代码,特别是在与STL算法结合使用时。本书会详细演示Lambda表达式的语法和应用,让读者体验到函数式编程的优雅。 范围-based for循环:这是对传统`for`循环的重大改进,它使得遍历容器中的元素变得更加直观和安全。本书会展示如何使用范围-based for循环,让代码更具可读性。 右值引用和移动语义:这两个概念是C++11引入的,它们使得对象的复制操作可以被“移动”以避免不必要的开销,从而显著提升了程序的性能,尤其是在处理大型对象时。本书将深入剖析它们的原理和应用。 STL(Standard Template Library):STL是C++标准库的核心组成部分,它提供了丰富的数据结构(如`vector`、`list`、`map`、`set`)和算法(如排序、查找、遍历)。本书将全面讲解STL的常用组件,以及如何利用它们来高效地解决各种问题。读者将学习到如何使用迭代器来访问容器元素,如何选择最适合的容器,以及如何调用STL算法来简化编程。 异常处理:在程序运行时,错误是不可避免的。本书详细介绍了C++的异常处理机制,包括`try`、`catch`和`throw`关键字,以及如何编写健壮的代码来处理运行时错误,提高程序的鲁棒性。 模板:模板是C++实现泛型编程的关键。本书将深入讲解函数模板和类模板,使读者能够编写出能够处理多种数据类型的通用代码,极大地提高了代码的复用性和灵活性。 三、 实践与进阶:培养解决复杂问题的能力 理论学习固然重要,但编程能力的提升离不开大量的实践。本书的最大亮点之一在于其丰富的实战示例和习题。每一个概念的讲解都辅以清晰易懂的代码片段,让读者能够立即动手实践,加深理解。 本书的章节设计也充满了递进性。在掌握了基础知识后,它会引导读者进入更复杂的领域,例如: 文件I/O:学习如何读写文件,实现数据的持久化存储。 多线程编程:了解如何利用C++进行并发编程,提升程序的响应速度和效率。 设计模式:介绍一些常用的设计模式,帮助读者构建更具可扩展性、可维护性和可重用性的软件系统。 内存管理深度探讨:除了智能指针,本书还会进一步探讨内存布局、栈与堆的区别、内存对齐等更底层的概念,为读者理解程序的性能和行为提供更深入的视角。 C++标准库的扩展使用:除了STL,本书还会涉及其他重要的标准库组件,例如用于日期和时间处理的``,用于正则表达式的``等,拓展读者的工具箱。 《C++程序设计(原书第3版)》的作者以其深厚的学术功底和丰富的实践经验,将C++这门博大精深的语言,以一种清晰、系统且引人入胜的方式呈现给读者。它不仅仅是一本书,更是一条通往C++高级编程殿堂的阶梯。通过阅读和实践本书的内容,您将能够: 理解C++的底层机制:摆脱对“黑箱”的依赖,深入理解变量存储、函数调用、内存分配等底层原理,为解决疑难问题打下基础。 写出更高效、更安全的代码:掌握现代C++的特性,有效避免常见的编程陷阱,提高程序的性能和稳定性。 构建更优雅、更具表现力的程序:学习面向对象设计、泛型编程以及STL等工具,能够用更简洁、更强大的方式来表达您的编程思想。 为深入学习C++打下坚实基础:本书的内容是后续学习C++高级主题,如元编程、并发模型、标准库源码分析等的基础。 无论您是立志于成为一名优秀的软件工程师,还是希望在计算机科学领域有所建树,掌握C++都是一项宝贵的财富。而《C++程序设计(原书第3版)》,将是您踏上这段精彩旅程的最佳起点和最可靠的指南。它将赋予您用C++创造无限可能的“魔法”。