1.1 C++简介 1
1.1.1 将C++用于游戏 1
第1章 类型、变量和标准I/O:Lost Fortune 1
1.1.2 创建可执行文件 2
1.1.3 处理错误 3
1.1.4 了解ISO标准 4
1.2 编写第一个C++程序 4
1.2.1 Game Over程序简介 4
1.2.2 为代码添加注释 5
1.2.3 使用空白 5
1.2.4 包括其他文件 6
1.2.5 定义main()函数 6
1.2.6 通过标准输出显示文本 6
1.2.8 从main()返回一个值 7
1.2.7 结束语句 7
1.3 使用std名称空间 8
1.3.1 Game Over 2.0程序简介 8
1.3.2 使用using指令 8
1.3.3 Game Over 3.0程序简介 9
1.3.4 使用using声明 9
1.3.5 何时使用using 9
1.4 使用算术操作符 10
1.4.1 Expensive Calculator程序简介 10
1.4.2 加法、减法和乘法 11
1.4.3 整数除法和浮点数除法 11
1.5.1 Game Stats程序简介 12
1.5 声明和初始化变量 12
1.4.5 操作的顺序 12
1.4.4 使用模操作符 12
1.5.2 基本类型 14
1.5.3 类型修饰符 14
1.5.4 声明变量 15
1.5.5 命名变量 15
1.5.6 向变量赋值 16
1.5.7 初始化变量 17
1.5.8 显示变量值 17
1.5.9 获得用户输入 18
1.5.10 为类型定义新名称 18
1.5.11 使用哪一种类型 18
1.6.1 Game Stats 2.0程序简介 19
1.6 使用变量执行算术运算 19
1.6.2 改变变量的值 20
1.6.3 使用组合赋值操作符 20
1.6.4 使用加1和减1操作符 21
1.6.5 处理整型数环绕 22
1.7 使用常量 22
1.7.1 Game Stats 3.0程序简介 23
1.7.2 使用常量 24
1.7.3 使用枚举 24
1.8 Lost Fortune简介 25
1.8.1 准备程序 26
1.8.2 从玩家那里获取信息 26
1.9 小结 27
1.8.3 讲故事 27
1.10 问题与答案 28
1.11 讨论题 29
1.12 练习题 30
第2章 事实、分支和游戏循环:Guess My Number 31
2.1 理解事实 31
2.2 使用if语句 32
2.2.1 Score Rater程序简介 32
2.2.2 测试true和false 34
2.2.3 将值解释为true或false 34
2.2.4 使用关系操作符 35
2.2.5 嵌套if语句 35
2.3.1 Score Rater2.0程序简介 36
2.3 使用else子句 36
2.3.2 创建两个分支路径 37
2.3.3 使else子句与正确的if语句配对 38
2.4 使用switch语句 39
2.4.1 Menu Chooser程序简介 39
2.4.2 创建多个分支路径 41
2.5 使用while循环 41
2.5.1 Play Again程序简介 41
2.5.2 使用while循环实现循环 42
2.6 使用do循环 42
2.6.1 Play Again 2.0程序简介 43
2.7 使用break和continue语句 44
2.7.1 Finicky Counter程序简介 44
2.6.2 使用do循环实现循环 44
2.7.2 创建while(true)循环 45
2.7.3 使用break语句退出循环 46
2.7.4 使用continue语句跳回循环顶部 46
2.7.5 何时使用break和continue 46
2.8 使用逻辑操作符 46
2.8.1 Designers Network程序简介 47
2.8.2 使用逻辑与操作符 49
2.8.3 使用逻辑或操作符 50
2.8.4 使用逻辑非操作符 50
2.8.5 操作符的顺序 51
2.9 生成随机数 51
2.9.2 调用rand()函数 52
2.9.1 Die Roller程序简介 52
2.9.3 生成随机数生成器种子 53
2.9.4 计算某个范围内的数字 54
2.10 游戏循环 54
2.11 Guess My Number简介 55
2.11.1 应用游戏循环 56
2.11.2 开始游戏 57
2.11.3 创建猜测循环 57
2.11.4 结束游戏 58
2.12 小结 58
2.13 问题与答案 59
2.14 讨论题 60
2.15 练习题 60
3.1 使用for循环 61
第3章 for循环、字符串和数组:Word Jumble 61
3.1.1 Counter程序简介 62
3.1.2 使用for循环计数 63
3.1.3 在for循环中使用空语句 64
3.1.4 嵌套for循环 64
3.2 对象 65
3.3 使用string对象 66
3.3.1 String Tester程序简介 67
3.3.2 创建string对象 68
3.3.3 串联string对象 68
3.3.4 使用size()成员函数 69
3.3.5 索引string对象 69
3.3.7 使用find()成员函数 70
3.3.6 遍历string对象 70
3.3.8 使用erase()成员函数 71
3.3.9 使用empty()成员函数 71
3.4 使用数组 72
3.4.1 Hero's Inventory程序简介 72
3.4.2 创建数组 73
3.4.3 索引数组 74
3.4.4 访问数组元素的成员函数 75
3.4.5 注意数组边界 75
3.5 C风格的字符串 76
3.6 使用多维数组 77
3.6.1 Tic-Tac-Toe Board程序简介 77
3.6.2 创建多维数组 78
3.7 Word Jumble简介 79
3.6.3 索引多维数组 79
3.7.2 挑选要打乱的单词 80
3.7.1 开始程序 80
3.7.3 打乱单词 81
3.7.4 欢迎玩家 81
3.7.5 进入游戏循环 82
3.7.6 说再见 82
3.8 小结 82
3.9 问题与答案 83
3.10 讨论题 84
3.11 练习题 85
第4章 标准模板库:Hangman 86
4.1 标准模板库简介 86
4.2.1 Hero's Inventory 2.0程序简介 87
4.2 使用矢量 87
4.2.2 准备使用矢量 89
4.2.3 声明矢量 89
4.2.4 使用push_back()成员函数 89
4.2.5 使用size()成员函数 90
4.2.6 索引矢量 90
4.2.7 调用元素的成员函数 91
4.2.8 使用pop_back()成员函数 91
4.2.9 使用clear()成员函数 91
4.2.10 使用empty()成员函数 91
4.3 使用迭代器 92
4.3.1 Hero's Inventory 3.0程序简介 92
4.3.2 声明迭代器 93
4.3.3 遍历矢量 94
4.3.4 更改矢量元素的值 96
4.3.5 访问矢量元素的成员函数 96
4.3.6 使用insert()矢量成员函数 97
4.3.7 使用erase()矢量成员函数 97
4.4 使用算法 98
4.4.1 High Scores程序简介 98
4.4.2 准备使用算法 100
4.4.3 使用random_shuffle()算法 100
4.4.4 使用sort()算法 100
4.4.5 使用merge()算法 101
4.5.1 了解矢量的扩大 102
4.5 了解矢量性能 102
4.5.2 了解元素插入和删除 103
4.6 了解其他STL容器 104
4.7 规划程序 104
4.7.1 使用伪代码 105
4.7.2 使用逐步求精方法 105
4.8 Hangman简介 106
4.8.1 设计游戏 106
4.8.2 开始程序 107
4.8.3 初始化变量和常量 107
4.8.4 进入主循环 108
4.8.5 获得玩家的猜测 108
4.9 小结 109
4.8.6 结束游戏 109
4.10 问题与答案 110
4.11 讨论题 111
4.12 练习题 111
第5章 函数:Mad Lib 112
5.1 创建函数 112
5.1.1 Instructions程序简介 112
5.1.2 声明函数 113
5.1.3 定义函数 114
5.1.4 调用函数 114
5.1.5 抽象 115
5.2 使用参数和返回值 115
5.2.1 Yes or No程序简介 115
5.2.3 使用参数接受值 117
5.2.2 返回一个值 117
5.2.4 封装 119
5.3 软件重用 119
5.4 了解范围 120
5.4.1 Scoping程序简介 120
5.4.2 处理独立的范围 121
5.4.3 使用嵌套的范围 122
5.5 使用全局变量 123
5.5.1 Global Reach程序简介 123
5.5.2 声明全局变量 125
5.5.3 访问全局变量 125
5.5.4 隐藏全局变量 125
5.5.6 尽可能少使用全局变量 126
5.6 使用全局常量 126
5.5.5 改变全局变量 126
5.7 使用默认参数 127
5.7.1 Give Me a Number程序简介 127
5.7.2 指定默认参数 128
5.7.3 将默认参数赋给参数 129
5.7.4 覆盖默认参数 129
5.8 重载函数 130
5.8.1 Triple程序简介 130
5.8.2 创建重载的函数 131
5.8.3 调用重载的函数 132
5.9 内联函数 132
5.9.1 Taking Damage程序简介 132
5.9.2 指定函数将要内联 133
5.9.3 调用内联的函数 134
5.10 Mad Lib游戏简介 134
5.10.1 开始程序 134
5.10.2 main()函数 135
5.10.3 askText()函数 136
5.10.4 askNumber()函数 136
5.10.5 tellStory()函数 136
5.11 小结 137
5.12 问题与答案 138
5.13 讨论题 139
5.14 练习题 139
6.1.1 Referencing程序简介 140
6.1 使用引用 140
第6章 引用:Tic-Tac-Toe 140
6.1.2 创建引用 141
6.1.3 访问引用的值 142
6.1.4 更改引用的值 142
6.2 传递引用以更改参数 143
6.2.1 Swap程序简介 143
6.2.2 按值传递 145
6.2.3 按引用传递 145
6.3 传递引用以提高效率 146
6.3.1 Inventory Displayer程序简介 146
6.3.2 了解引用传递的缺点 147
6.3.3 将参数声明为常量引用 147
6.4 决定如何传递参数 148
6.3.4 传递常量引用 148
6.5 返回引用 149
6.5.1 Inventory Reference程序简介 149
6.5.2 返回一个引用 150
6.5.3 显示返回的引用的值 151
6.5.4 将返回的引用赋给另一个引用 151
6.5.5 将返回的引用赋给变量 151
6.5.6 通过返回的引用更改对象 152
6.6 Tic-Tac-Toe游戏简介 152
6.6.1 规划游戏 153
6.6.2 开始程序 155
6.6.3 main()函数 156
6.6.4 Instruction()函数 156
6.6.6 askNumber()函数 157
6.6.5 askYesNo()函数 157
6.6.7 humanPiece()函数 158
6.6.8 opponent()函数 158
6.6.9 displayBoard()函数 158
6.6.10 winner()函数 159
6.6.11 isLegal()函数 160
6.6.12 humanMove()函数 160
6.6.13 computerMove()函数 161
6.6.14 announceWinner()函数 163
6.7 小结 163
6.8 问题与答案 164
6.9 讨论题 165
6.10 练习题 166
7.1 指针基础知识 167
第7章 指针:Tic-Tac-Toe 2.0 167
7.1.1 Pointing程序简介 168
7.1.2 声明指针 169
7.1.3 初始化指针 170
7.1.4 将地址赋给指针 170
7.1.5 解除指针的引用 171
7.1.6 重新为指针赋值 172
7.1.7 使用对象指针 172
7.2 指针和常量 173
7.2.1 使用常量指针 173
7.2.2 使用指向常量的指针 174
7.2.3 使用指向常量的常量指针 175
7.2.4 总结常量和指针 175
7.3.1 Swap Pointer Version程序简介 176
7.3 传递指针 176
7.3.2 按值传递 177
7.3.3 传递常量指针 178
7.4 返回指针 179
7.4.1 Inventory Pointer程序简介 179
7.4.2 返回指针 180
7.4.3 使用返回的指针显示值 181
7.4.4 将返回的指针赋给另一个指针 181
7.4.5 将返回的指针指向的值赋给变量 182
7.4.6 通过返回的指针改变对象 183
7.5 理解指针与数组之间的关系 183
7.5.1 Array Passer程序简介 183
7.5.3 传递和返回数组 185
7.5.2 使用数组名称作为常量指针 185
7.6 Tic-Tac-Toe 2.0游戏简介 186
7.7 小结 187
7.8 问题与答案 188
7.9 讨论题 189
7.10 练习题 189
第8章 类:Critter Caretaker 190
8.1 定义新类型 190
8.1.1 Simple Critter程序简介 190
8.1.2 定义类 192
8.1.3 定义成员函数 193
8.1.4 实例化对象 193
8.1.5 访问数据成员 193
8.2.1 Constructor Critter程序简介 194
8.1.6 调用成员函数 194
8.2 使用构造函数 194
8.2.2 声明和定义构造函数 196
8.2.3 自动调用构造函数 197
8.3 设置成员访问级别 197
8.3.1 Private Critter程序简介 197
8.3.2 指定公共和私有访问级别 199
8.3.3 定义访问器成员函数 199
8.3.4 定义常量成员函数 200
8.4 使用静态数据成员和成员函数 201
8.4.1 Static Critter程序简介 201
8.4.2 声明和初始化静态数据成员 202
8.4.4 定义静态成员函数 203
8.4.3 访问静态数据成员 203
8.4.5 调用静态成员函数 204
8.5 Critter Caretaker游戏简介 204
8.5.1 设计游戏 204
8.5.2 设计伪代码 206
8.5.3 Critter类 206
8.5.4 main()函数 208
8.6 小结 209
8.7 问题与答案 210
8.8 讨论题 212
8.9 练习题 212
9.1 使用聚合 213
9.1.1 Critter Farm程序简介 213
第9章 高级类和动态内存:Game Lobby 213
9.1.2 使用对象数据成员 215
9.1.3 使用容器数据成员 216
9.2 使用友元函数和操作符重载 216
9.2.1 Friend Critter程序简介 217
9.2.2 创建友元函数 218
9.2.3 重载操作符 218
9.3 动态分配内存 219
9.3.1 Heap程序简介 220
9.3.2 使用new操作符 221
9.3.3 使用delete操作符 222
9.3.4 避免内存泄漏 223
9.4.1 Heap Data Member程序简介 224
9.4 使用数据成员和堆 224
9.4.2 声明指向堆上的值的数据成员 227
9.4.3 定义析构函数 227
9.4.4 定义复制构造函数 228
9.4.5 重载赋值操作符 230
9.4.6 Game Lobby程序简介 232
9.4.7 Player类 233
9.4.8 Lobby类 234
9.4.9 Lobby∷AddPlayer()成员函数 235
9.4.10 Lobby∷RemovePlayer()成员函数 236
9.4.11 Lobby∷Clear()成员函数 237
9.4.12 operator<<()成员函数 238
9.4.13 main()函数 238
9.5 小结 239
9.6 问题与答案 240
9.7 讨论题 241
9.8 练习题 241
第10章 继承和多态:Blackjack 242
10.1 继承简介 242
10.1.1 Simple Boss程序简介 243
10.1.2 从基类派生 245
10.1.3 从派生类实例化对象 245
10.1.4 使用继承的成员 246
10.2 控制继承基础上的访问 246
10.2.1 Simple Boss 2.0程序简介 247
10.2.2 对类成员使用访问修饰符 248
10.2.3 在派生类时使用访问修饰符 248
10.3.1 Overriding Boss程序简介 249
10.3 调用和覆盖基类成员函数 249
10.3.2 调用基类构造函数 250
10.3.3 覆盖基类成员函数 251
10.3.4 调用基类成员函数 251
10.4 在派生类中使用重载的赋值操作符和复制构造函数 252
10.5 多态简介 253
10.5.1 Virtual Boss程序简介 253
10.5.2 定义虚拟成员函数 255
10.5.3 定义虚拟析构函数 256
10.6 使用抽象类 256
10.6.1 Abstract Creature程序 257
10.6.2 声明纯虚拟函数 258
10.6.3 从抽象类派生一个类 258
10.7.2 使用一个文件 259
10.7 管理代码 259
10.7.1 Critter项目 259
10.7.3 创建头文件 261
10.7.4 创建实现文件 262
10.7.5 创建应用程序文件 262
10.8 Blackiack游戏简介 263
10.8.1 设计类 264
10.8.2 设计游戏逻辑 267
10.8.3 Card类 268
10.8.4 Hand类 269
10.8.5 GenericPlayer类 271
10.8.6 Player类 272
10.8.7 House类 273
10.8.8 Deck类 274
10.8.9 Game类 276
10.8.10 main()函数 278
10.8.11 重载operator<<函数 279
10.9 小结 280
10.10 问题与答案 280
10.11 讨论题 281
10.12 练习题 282
附录A 创建第一个C++程序 283
附录B 操作符优先级 287
附录C 关键字 290
附录D ASCII表 291
附录E 转义序列 296