C++程序设计:现代方法

1

C++程序设计:现代方法封面

著    [美] F. Alexander Allain
译    赵守彬 陈园军 马兴旺
责任编辑 李松峰 毛倩倩
执行编辑 程
责任印制 焦志炜
人民邮电出版社出版发行  北京市丰台区成寿寺路11号

让我们准备进入程序的世界吧!编程与其他艺术形式相同,你能通过编程进行创造,但不
同的是,编程可以让你的创造力因计算机的性能大大提升!你可以创造迷人的游戏 ,比如《魔
兽世界》(World of Warcraft)《生化奇兵》(Bioshock)《战争机器》(Gears of War)和《质量
效应》(Mass Effect)。你也可以创建让人身临其境的虚拟现实类游戏,比如《模拟人生》(The
Sims)。你可以编写程序,比如浏览器(如 Chrome)、电子邮件编辑器或聊天客户端,或者是
像 Facebook、亚马逊那样的网站,把人们联系在一起。你也可以满足用户的需求,为 iPhone
或者 Android 手机构建应用。当然,这都是需要花时间磨练成为高手之后才能做出来的。不过,
就算你刚刚开始学习,也可以写出很多有趣的程序,比如写个程序解决你的数学作业,编写《俄
罗斯方块》(Tetris)等小游戏在朋友面前炫耀,或者编写工具便利地解决手头上需要几天或者
几周才能完成的复杂运算,等等。一旦理解了本书教给你的最基本的编程知识,你便能写出各
种各样的图形或网络程序,包括游戏、科学模拟程序,等等。

目 录
第一部分 进入 C++的世界
第 1 章 简介和环境搭建 ……………………………3
1.1 什么是编程语言 ………………………………….3
1.2 C 和 C++之间的不同之处 …………………….3
1.3 学习 C++之前,是否需要先了解 C……….3
1.4 成为程序员,是否需要懂数学 ……………..4
1.5 术语 …………………………………………………..4
1.5.1 编程…………………………………………4
1.5.2 可执行文件 ………………………………4
1.6 编辑和编译源文件 ………………………………4
1.7 关于示例源代码 ………………………………….5
1.8 Windows …………………………………………….5
1.8.1 第 1 步:下载 Code::Blocks ……….5
1.8.2 第 2 步:安装 Code::Blocks ……….5
1.8.3 第 3 步:运行 Code::Blocks ……….6
1.8.4 错误调试………………………………….9
1.8.5 使用 Code::Blocks 的原因 ………..11
1.9 Macintosh………………………………………….11
1.9.1 Xcode …………………………………….12
1.9.2 安装 Xcode 5…………………………..12
1.9.3 运行 Xcode …………………………….12
1.9.4 用 Xcode 创建第一个 C++
程序……………………………………….12
1.9.5 安装 Xcode 6 beta ……………………16
1.9.6 运行 Xcode …………………………….16
1.9.7 用 Xcode 创建第一个 C++
程序……………………………………….17
1.9.8 错误调试………………………………..20
1.10 Linux………………………………………………21
1.10.1 步骤 1:安装 g++ ………………..21
1.10.2 步骤 2:运行 g++………………….22
1.10.3 步骤 3:运行你的程序…………..22
1.10.4 步骤 4:安装文本编辑器……….23
1.10.5 配置 nano……………………………..23
1.10.6 使用 nano……………………………..23
第 2 章 C++基础……………………………………..27
2.1 C++简介 …………………………………………..27
2.1.1 最简单的 C++程序 ………………….27
2.1.2 程序无法运行的原因……………….29
2.1.3 C++程序的基本结构 ……………….30
2.2 为程序添加注释 ………………………………..30
2.3 像程序员一样思考,创建可复用的
代码 …………………………………………………31
2.4 痛并快乐着的练习 …………………………….32
2.5 问答题 ……………………………………………..32
2.6 实践题 ……………………………………………..33
第 3 章 用户交互和变量………………………….34
3.1 变量 …………………………………………………34
3.1.1 C++中的变量声明 …………………..34
3.1.2 使用变量………………………………..34
3.1.3 程序闪退的处理方法……………….35
3.1.4 修改、使用和比较变量……………36
3.1.5 加减 1 的简写 …………………………36
3.2 变量的使用和滥用 …………………………….38
3.2.1 C++中声明变量的常见错误……..38
3.2.2 区分大小写…………………………….39
3.2.3 变量命名………………………………..39
3.3 字符串存储……………………………………….40
3.4 基本类型的存储解析 …………………………42
3.5 问答题 ……………………………………………..43
2 目 录
3.6 实践题 ……………………………………………..44
第 4 章 if 语句 ……………………………………….45
4.1 if 的基础语法 ………………………………….45
4.2 表达式 ……………………………………………..46
4.2.1 truth ………………………………………47
4.2.2 布尔型 …………………………………..48
4.3 else 语句…………………………………………48
4.4 else-if…………………………………………..49
4.5 字符串比较……………………………………….49
4.6 逻辑运算符在条件语句上的有趣应用….50
4.6.1 逻辑非 …………………………………..50
4.6.2 逻辑与 …………………………………..51
4.6.3 逻辑或 …………………………………..51
4.6.4 综合表达式…………………………….52
4.6.5 逻辑表达式示例 ……………………..53
4.7 问答题 ……………………………………………..54
4.8 实践题 ……………………………………………..54
第 5 章 循环…………………………………………….55
5.1 while 循环……………………………………….55
5.2 for 循环…………………………………………..57
5.2.1 变量初始化…………………………….57
5.2.2 循环条件………………………………..57
5.2.3 变量更新………………………………..57
5.3 do-while 循环 …………………………………58
5.4 控制循环 ………………………………………….59
5.5 嵌套循环 ………………………………………….61
5.6 选择合适的循环………………………………..62
5.6.1 for 循环………………………………..62
5.6.2 while 循环…………………………….62
5.6.3 do-while 循环 ………………………63
5.7 问答题 ……………………………………………..64
5.8 实践题 ……………………………………………..64
第 6 章 函数…………………………………………….66
6.1 函数语法 ………………………………………….66
6.2 局部变量和全局变量 …………………………68
6.2.1 局部变量………………………………..68
6.2.2 全局变量………………………………..69
6.2.3 有关全局变量的警告……………….70
6.3 使函数对调用有效……………………………. 71
6.3.1 函数定义和声明…………………….. 71
6.3.2 函数原型的应用示例 ……………… 72
6.4 把程序拆分成函数……………………………. 73
6.4.1 当需要重复代码时 …………………. 73
6.4.2 使代码更加易读…………………….. 73
6.5 命名和重载函数……………………………….. 73
6.6 函数概述 …………………………………………. 74
6.7 问答题 …………………………………………….. 74
6.8 实践题 …………………………………………….. 75
第 7 章 如何解决问题…………………………….. 76
7.1 只需判断数被除时有无余数………………. 78
7.2 效率和安全的简单说明 …………………….. 79
7.3 不知道算法的情况下的解决方案 ……….. 80
7.4 实践题 …………………………………………….. 82
第 8 章 switch-case 和枚举 ………………… 83
8.1 比较 switch-case 和 if-else ………… 85
8.2 使用枚举创建简单类型 …………………….. 86
8.3 问答题 …………………………………………….. 87
8.4 实践题 …………………………………………….. 88
第 9 章 随机……………………………………………. 89
9.1 获得随机数 ……………………………………… 90
9.2 bug 和随机数……………………………………. 92
9.3 问答题 …………………………………………….. 92
9.4 实践题 …………………………………………….. 93
第二部分 数据处理
第 10 章 数组………………………………………….. 96
10.1 数组的基础语法……………………………… 96
10.2 数组使用示例…………………………………. 97
10.2.1 使用数组存储排序 ……………… 97
10.2.2 用多维数组表示网格 ………….. 98
10.3 使用数组 ……………………………………….. 98
10.3.1 数组和 for 循环…………………. 98
10.3.2 将数组传递给函数 ……………… 99
10.3.3 注销数组的末尾 ……………….. 101
10.4 数组排序 ……………………………………… 101
目 录 3
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
18
17
10.5 问答题…………………………………………..105
10.6 实践题…………………………………………..106
第 11 章 结构体……………………………………..107
11.1 关联多个值……………………………………107
11.1.1 语法………………………………….107
11.1.2 传递结构体变量…………………109
11.2 问答题…………………………………………..111
11.3 实践题…………………………………………..112
第 12 章 指针简介………………………………….113
12.1 忘记之前对指针的认知…………………..113
12.2 指针的概念以及关注指针的原因……..113
12.3 内存的概念……………………………………114
12.3.1 变量与地址………………………..115
12.3.2 内存布局 …………………………..116
12.4 指针的其他优点(和缺点) ……………117
12.5 问答题…………………………………………..118
12.6 实践题…………………………………………..119
第 13 章 使用指针………………………………….120
13.1 指针的语法……………………………………120
13.2 指针的指向:变量的地址 ……………….121
13.3 未初始化指针与空指针…………………..125
13.4 指针和函数……………………………………125
13.5 引用 ……………………………………………..128
13.6 问答题…………………………………………..129
13.7 实践题…………………………………………..130
第 14 章 动态内存分配………………………….131
14.1 获得更多的新内存………………………….131
14.1.1 运行内存不足…………………….132
14.1.2 引用和动态分配…………………132
14.2 指针和数组……………………………………132
14.3 多维数组……………………………………….134
14.4 指针运算……………………………………….135
14.4.1 理解二维数组…………………….136
14.4.2 指向指针的指针…………………137
14.4.3 指向指针的指针与二维
数组………………………………….138
14.5 盘点指针……………………………………….139
14.6 问答题 ………………………………………….140
14.7 实践题 ………………………………………….141
第 15 章 数据结构简介与链表 ………………142
15.1 指针和结构体………………………………..144
15.2 创建一个链表………………………………..145
15.2.1 第一轮………………………………146
15.2.2 第二轮………………………………147
15.3 遍历链表……………………………………….148
15.4 盘点链表……………………………………….150
15.5 问答题 ………………………………………….152
15.6 实践题 ………………………………………….153
第 16 章 递归…………………………………………155
16.1 如何看待递归………………………………..155
16.2 递归和数据结构 …………………………….157
16.3 循环和递归……………………………………159
16.4 栈…………………………………………………161
16.4.1 栈的力量 …………………………..163
16.4.2 递归的缺点 ……………………….164
16.4.3 调试栈溢出 ……………………….164
16.4.4 性能………………………………….166
16.5 盘点递归……………………………………….166
16.6 问答题 ………………………………………….167
16.7 实践题 ………………………………………….167
第 17 章 二叉树……………………………………..169
17.1 在现实世界中使用二叉树……………….184
17.2 问答题 ………………………………………….186
17.3 实践题 ………………………………………….187
第 18 章 标准模板库……………………………..188
18.1 vector,大小可变的数组…………………189
18.1.1 vector 的方法调用………………190
18.1.2 vector 的其他功能………………190
18.2 map ………………………………………………191
18.3 迭代器 ………………………………………….192
18.4 盘点 STL ………………………………………195
18.5 进一步学习 STL…………………………….196
18.6 问答题 ………………………………………….196
18.7 实践题 ………………………………………….197
4 目 录
第 19 章 更多关于字符串的内容…………..198
19.1 读入字符串……………………………………198
19.2 字符串长度和访问单个元素……………200
19.3 字符串搜索与子字符串…………………..200
19.4 通过引用传递………………………………..202
19.4.1 const 传播 ……………………….203
19.4.2 const 和 STL ……………………204
19.5 问答题 ………………………………………….206
19.6 实践题 ………………………………………….206
第 20 章 使用 Code::Blocks 进行调试…..208
20.1 踏上调试之旅………………………………..209
20.2 设置断点……………………………………….211
20.2.1 调试崩溃问题 ……………………216
20.2.2 强行进入一个“悬停”
程序………………………………….219
20.2.3 修改变量 …………………………..223
20.2.4 总结………………………………….223
20.3 实践题 ………………………………………….223
20.3.1 问题 1:指数问题………………223
20.3.2 问题 2:相加问题………………224
20.3.3 问题 3:斐波那契程序的
bug……………………………………225
20.3.4 问题 4:列表的错误读取
和错误输出 ……………………….225
第三部分 编写大规模程序
第 21 章 将程序分解……………………………..228
21.1 理解 C++的构建过程 ……………………..228
21.1.1 预处理………………………………228
21.1.2 编译………………………………….230
21.1.3 链接………………………………….230
21.1.4 把编译和链接分开的原因 …..231
21.2 如何把程序分开到不同的文件中 …….231
21.2.1 第一步:将声明和定义分
开……………………………………..231
21.2.2 第二步:找出哪些函数需
要共享出去 ……………………….232
21.2.3 第三步:把共用的函数移
到新的文件中 …………………… 232
21.2.4 看一个完整的例子…………….. 233
21.2.5 关于头文件其他要注意的
地方…………………………………. 237
21.2.6 在开发环境中处理多个源
文件…………………………………. 237
21.3 问答题 …………………………………………. 240
21.4 实践题 …………………………………………. 240
第 22 章 程序设计方法介绍…………………. 241
22.1 冗余代码 ……………………………………… 241
22.2 假定数据是如何存储的 …………………. 242
22.3 设计和注释…………………………………… 244
22.4 问答题 …………………………………………. 245
第 23 章 隐藏结构化数据的表示………….. 246
23.1 问答题 …………………………………………. 250
23.2 实践题 …………………………………………. 250
第 24 章 类……………………………………………. 251
24.1 隐藏数据的存储方式 …………………….. 251
24.2 声明一个类的实例………………………… 253
24.3 类的职责 ……………………………………… 254
24.4 小结…………………………………………….. 255
24.5 问答题 …………………………………………. 255
24.6 实践题 …………………………………………. 256
第 25 章 类的生命周期…………………………. 257
25.1 对象构造 ……………………………………… 257
25.1.1 没有新建构造函数的结果 ….. 260
25.1.2 初始化类的成员 ……………….. 260
25.1.3 用初始化列表初始化常量
字段…………………………………. 261
25.2 解构对象 ……………………………………… 262
25.2.1 delete 时的解构 ……………… 264
25.2.2 超出作用域时的解构…………. 264
25.2.3 由其他析构函数导致的
解构…………………………………. 265
25.3 复制类 …………………………………………. 266
25.3.1 赋值操作符 ………………………. 267
目 录 5
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
18
17
25.3.2 复制构造函数…………………….269
25.3.3 所有编译器生成的方法 ………270
25.3.4 彻底地阻止复制…………………271
25.4 问答题…………………………………………..272
25.5 实践题…………………………………………..273
第 26 章 继承和多态 ……………………………..274
26.1 C++中的继承…………………………………275
26.1.1 继承的别的作用以及误用
的情况 ………………………………278
26.1.2 继承、对象构建和销毁 ………279
26.1.3 多态和对象销毁…………………281
26.1.4 对象切割的问题…………………283
26.1.5 与子类共享代码…………………284
26.1.6 protected 的数据 …………….285
26.1.7 属于类的数据…………………….285
26.1.8 如何实现多态…………………….286
26.2 问答题…………………………………………..288
26.3 实践题…………………………………………..290
第 27 章 命名空间………………………………….291
27.1 问答题…………………………………………..294
27.2 实践题…………………………………………..295
第 28 章 文件 I/O …………………………………..296
28.1 文件 I/O 基础…………………………………296
28.2 文件格式……………………………………….298
28.3 写文件…………………………………………..301
28.4 文件位置……………………………………….302
28.5 接受命令行参数 …………………………….305
28.6 二进制文件 I/O………………………………307
28.6.1 处理二进制文件…………………309
28.6.2 转换到 char*…………………….309
28.6.3 二进制 I/O 的一个例子 ……….310
28.6.4 把类存储到文件中 ……………..311
28.6.5 读取二进制文件…………………312
28.7 问答题 ………………………………………….315
28.8 实践题 ………………………………………….315
第 29 章 C++中的模板 ………………………….318
29.1 模板函数……………………………………….318
29.1.1 类型推断 …………………………..320
29.1.2 鸭子类型 …………………………..320
29.2 模板类 ………………………………………….321
29.3 使用模板的一些小技巧…………………..322
29.4 模板小结……………………………………….325
29.5 问答题 ………………………………………….328
29.6 实践题 ………………………………………….330
第四部分 其他
第 30 章 使用 iomanip 格式化输出……..332
30.1 处理空间问题………………………………..332
30.1.1 使用 setw 设置字段宽度 ……332
30.1.2 改变填充字符…………………….333
30.1.3 永久改变设置…………………….333
30.2 把你的 iomanip 知识汇总到一起……334
30.2.1 输出数字 …………………………..336
30.2.2 使用 setprecision 来设置
数值输出的精度…………………336
30.2.3 如何处理货币…………………….337
30.2.4 按不同的进制输出……………..337
第 31 章 异常和错误报告………………………338
第 32 章 最后的话 …………………………………346
索引 ………………………………………………………….368

图灵程序设计丛书七百多册+图灵电子与电气工程丛书72本+图灵原版数学·统计学系列49本 PDF下载

常见问题
如何获取我想要的资源?
代找资源网不售卖任何资源,只代找资源,需要代找服务的小伙伴请添加客服QQ 1127720680

代找资源网不售卖任何资源,只提供代找服务

QQ客服

微信客服

微信客服
0

评论0

请先
显示验证码
没有账号?注册  忘记密码?