第1章 类型、变量与标准 I/O: Lost Fortune 1
1.1 C++简介 1
1.1.1使用C++编写游戏 1
1.1.2生成可执行文件 2
1.1.3错误处理 3
1.1.4理解ISO标准 3
1.2编写第一个C++程序 4
1.2.1 Game Over程序简介 4
1.2.2注释 5
1.2.3使用空白字符 5
1.2.4包含其他文件 5
1.2.5定义main()函数 6
1.2.6通过标准输出显示文本 6
1.2.7语句的终止 7
1.2.8从main()函数返回值 7
1.3使用std名称空间 8
1.3.1 Game Over 2.0程序简介 8
1.3.2使用usmg指令 8
1.3.3 Game Over 3.0程序简介 8
1.3.4使用using声明 9
1.3.5使用using的时机 9
1.4使用算术运算符 9
1.4.1 Expensive Calculator程序简介 10
1.4.2加法、减法与乘法 11
1.4.3理解整型与浮点型除法 11
1.4.4使用取模运算符 11
1.4.5运算符的优先级 11
1.5声明和初始化变量 12
1.5.1 Game Stats程序简介 12
1.5.2基本类型 13
1.5.3类型修饰符 13
1.5.4变量声明 14
1.5.5变量命名 15
1.5.6变量的赋值 15
1.5.7变量初始化 16
1.5.8显示变量值 16
1.5.9获取用户输入 17
1.5.10为类型定义新名称 17
1.5.11类型的选择 17
1.6使用变量进行算术运算 18
1.6.1 Game Stats 2.0程序简介 18
1.6.2修改变量值 19
1.6.3使用组合赋值运算符 19
1.6.4递增运算符与递减运算符 20
1.6.5整数的溢出处理 21
1.7使用常量 21
1.7.1 Game Stats 3.0程序简介 21
1.7.2使用常量 22
1.7.3使用枚举类型 23
1.8 Lost Fortune简介 23
1.8.1创建程序 24
1.8.2从玩家获取信息 24
1.8.3讲故事 25
1.9本章小结 26
1.10问与答 26
1.11问题讨论 27
1.12习题 27
第2章 真值、分支与游戏循环:Guess My Number 29
2.1理解真值 29
2.2使用if语句 30
2.2.1 Score Rater程序简介 30
2.2.2验证真与假 32
2.2.3值的真与假 33
2.2.4使用关系运算符 33
2.2.5 if语句的嵌套 34
2.3使用else子句 34
2.3.1 Score Rater 2.0程序简介 34
2.3.2创建分支 36
2.4使用带else子句的if语句序列 36
2.4.1 Score Rater 3.0程序简介 36
2.4.2创建带else子句的if语句序列 38
2.5使用switch语句 38
2.5.1 Menu Chooser程序简介 39
2.5.2创建多路分支 40
2.6使用while循环 40
2.6.1 Play Again游戏简介 41
2.6.2使用while循环 42
2.7使用do循环 42
2.7.1 Play Again 2.0程序简介 42
2.7.2使用do循环 43
2.8使用break和continue语句 44
2.8.1 Finicky Counter程序简介 44
2.8.2创建while(true)循环 45
2.8.3使用break语句退出循环 45
2.8.4使用continue语句跳转到循环开始 45
2.8.5使用break和continue的时机 46
2.9使用逻辑运算符 46
2.9.1 Designers Network程序简介 46
2.9.2使用逻辑与运算符 48
2.9.3使用逻辑或运算符 49
2.9.4使用逻辑非运算符 49
2.9.5运算符的优先级 50
2.10随机数的生成 50
2.10.1 Die Roller程序简介 51
2.10.2调用rand()函数 51
2.10.3为随机数生成器确定种子 52
2.10.4在一定范围内计算 52
2.11理解游戏主循环 53
2.12 Guess My Number游戏简介 54
2.12.1采用游戏主循环 54
2.12.2初始化游戏 55
2.12.3创建游戏主循环 56
2.12.4游戏结束 56
2.13本章小结 56
2.14问与答 57
2.15 问题讨论 58
2.16习题 59
第3章for循环、字符串与数组:Word Jumble 61
3.1使用for循环 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.6循环访问string对象 70
3.3.7使用find()成员函数 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.6.3多维数组的索引 79
3.7 Word Jumble程序简介 79
3.7.1创建程序 80
3.7.2选择单词 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 87
4.1标准模板库简介 87
4.2使用vector 88
4.2.1 Hero’s Inventory 2.0程序简介 88
4.2.2使用向量的准备工作 90
4.2.3向量的声明 90
4.2.4使用push_ back()成员函数 91
4.2.5使用size()成员函数 91
4.2.6向量的索引 91
4.2.7调用元素的成员函数 92
4.2.8使用pop_ back()成员函数 92
4.2.9使用clear()成员函数 92
4.2.10使用empty()成员函数 92
4.3使用迭代器 93
4.3.1 Hero’s Inventory 3.0程序简介 93
4.3.2迭代器的声明 94
4.3.3循环访问向量 95
4.3.4修改向量元素的值 97
4.3.5访问向量元素的成员函数 97
4.3.6使用向量的成员函数insert() 98
4.3.7使用向量的成员函数erase() 98
4.4使用算法 99
4.4.1 High Scores程序简介 99
4.4.2使用算法的准备工作 101
4.4.3使用fimd()算法 101
4.4.4使用random_ shuffle()算法 101
4.4.5使用sort()算法 102
4.5理解向量的性能 102
4.5.1向量的增长 103
4.5.2元素的插入与删除 104
4.6其他STL容器 104
4.7对程序进行规划 105
4.7.1使用伪代码 105
4.7.2逐步细化 106
4.8 Hangman简介 106
4.8.1游戏规划 107
4.8.2创建程序 107
4.8.3变量与常量的初始化 108
4.8.4进入游戏主循环 108
4.8.5获取玩家的猜测 108
4.8.6游戏结束 109
4.9本章小结 110
4.10问与答 110
4.11问题讨论 111
4.12习题 111
第5章 函数:Mad Lib 113
5.1创建函数 113
5.1.1 Instructions程序简介 113
5.1.2函数声明 114
5.1.3函数定义 115
5.1.4函数调用 115
5.1.5理解抽象 115
5.2使用形参和返回值 116
5.2.1 Yes or No程序简介 116
5.2.2返回值 117
5.2.3传递参数值 118
5.2.4理解封装 119
5.3理解软件重用 120
5.4使用作用域 120
5.4.1 Scoping程序简介 120
5.4.2使用独立的作用域 122
5.4.3使用嵌套作用域 123
5.5使用全局变量 124
5.5.1 Global Reach程序简介 124
5.5.2声明全局变量 125
5.5.3访问全局变量 125
5.5.4隐藏全局变量 125
5.5.5修改全局变量 126
5.5.6尽量少使用全局变量 126
5.6使用全局常量 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调用重载函数 131
5.9内联函数 132
5.9.1 Taking Damage程序简介 132
5.9.2函数内联的指定 133
5.9.3调用内联函数 133
5.10 Mad Lib游戏简介 134
5.10.1创建程序 134
5.10.2 main()函数 135
5.10.3 askText()函数 135
5.10.4 askNumber()函数 135
5.10.5 tellStory()函数 136
5.11本章小结 136
5.12问与答 137
5.13问题讨论 138
5.14习题 138
第6章 引用:Tic-Tac-Toe 139
6.1使用引用 139
6.1.1 Referencing程序简介 139
6.1.2创建引用 140
6.1.3访问被引用的值 141
6.1.4修改被引用的值 141
6.2通过传递引用改变实参 142
6.2.1 Swap程序简介 142
6.2.2按值传递参数 144
6.2.3按引用传递参数 144
6.3传递引用以提高效率 145
6.3.1 Inventory Displayer程序简介 145
6.3.2引用传递的陷阱 146
6.3.3以常量引用声明参数 146
6.3.4传递常量引用 147
6.4如何传递实参 147
6.5返回引用 148
6.5.1 Inventory Referencer程序简介 148
6.5.2返回一个引用 149
6.5.3显示返回的引用的值 150
6.5.4将返回的引用赋值给引用 150
6.5.5将返回的引用赋值给变量 150
6.5.6通过返回的引用修改对象 150
6.6 Tic-Tac-Toe游戏简介 151
6.6.1游戏规划 151
6.6.2创建程序 153
6.6.3 main()函数 154
6.6.4 instructions()函数 155
6.6.5 askYesNo()函数 155
6.6.6 askNumber()函数 156
6.6.7 humanPiece()函数 156
6.6.8 opponent()函数 156
6.6.9 displayBoard()函数 157
6.6.10 winner()函数 157
6.6.11 isLegal()函数 158
6.6.12 humanMove()函数 159
6.6.13 computerMove()函数 159
6.6.14 announceWinner()函数 161
6.7本章小结 162
6.8问与答 162
6.9问题讨论 164
6.10习题 164
第7章 指针:Tic-Tac-Toe 2.0 165
7.1指针基础 165
7.1.1 Pointing程序简介 166
7.1.2指针的声明 167
7.1.3指针的初始化 168
7.1.4将地址赋值给指针 168
7.1.5指针的解引用 169
7.1.6指针的重新赋值 169
7.1.7使用对象的指针 170
7.2指针和常量 171
7.2.1使用常量指针 171
7.2.2使用指向常量的指针 172
7.2.3使用指向常量的常量指针 172
7.2.4常量与指针小结 173
7.3传递指针 173
7.3.1 Swap Pointer Version程序简介 173
7.3.2值传递 175
7.3.3传递常量指针 175
7.4返回指针 176
7.4.1 Inventory Pointer程序简介 176
7.4.2返回指针 178
7.4.3使用返回的指针显示值 179
7.4.4将返回的指针赋值给指针 179
7.4.5将返回的指针指向的值赋值给变量 179
7.4.6通过返回的指针修改对象 180
7.5理解指针与数组的关系 181
7.5.1 Array Passer程序简介 181
7.5.2将数组名用作常量指针 182
7.5.3数组的传递与返回 182
7.6 Tic-Tac-Toe 2.0程序简介 183
7.7本章小结 184
7.8问与答 185
7.9问题讨论 186
7.10习题 186
第8章类:Critter Caretaker 187
8.1定义新类型 187
8.1.1 Simple Critter程序简介 187
8.1.2类的定义 189
8.1.3成员函数的定义 189
8.1.4对象的实例化 190
8.1.5数据成员的访问 190
8.1.6成员函数的调用 190
8.2使用构造函数 191
8.2.1 Constructor Critter程序简介 191
8.2.2构造函数的声明与定义 192
8.2.3构造函数的自动调用 193
8.3设置成员访问级别 193
8.3.1 Private Critter程序简介 193
8.3.2指定公有与私有访问级别 195
8.3.3定义访问器成员函数 196
8.3.4定义常量成员函数 197
8.4使用静态数据成员与静态成员函数 197
8.4.1 Static Critter程序简介 197
8.4.2声明与初始化静态数据成员 199
8.4.3访问静态数据成员 199
8.4.4声明与定义静态成员函数 200
8.4.5调用静态成员函数 200
8.5 Critter Caretaker游戏简介 201
8.5.1游戏规划 201
8.5.2规划伪代码 202
8.5.3 Critter类 202
8.5.4 main()函数 205
8.6本章小结 206
8.7问与答 207
8.8问题讨论 208
8.9习题 208
第9章 高级类与动态内存:Game Lobby 211
9.1使用聚合体 211
9.1.1 Critter Farm程序简介 212
9.1.2使用对象数据成员 213
9.1.3使用容器数据成员 214
9.2使用友元函数与运算符重载 215
9.2.1 Friend Critter程序简介 215
9.2.2创建友元函数 217
9.2.3运算符重载 217
9.3动态分配内存 218
9.3.1 Heap程序简介 218
9.3.2使用new运算符 220
9.3.3使用delete运算符 221
9.3.4避免内存泄漏 221
9.4使用数据成员与堆 223
9.4.1 Heap Data Member程序简介 223
9.4.2声明指向堆中值的指针数据成员 225
9.4.3声明与定义析构函数 226
9.4.4声明与定义拷贝构造函数 227
9.4.5赋值运算符的重载 229
9.5 Game Lobby程序简介 231
9.5.1 Player类 232
9.5.2 Lobby类 233
9.5.3 Lobby::AddPlayer()成员函数 234
9.5.4 Lobby::RemovePlayer()成员函数 236
9.5.5 Lobby::Clear()成员函数 237
9.5.6 operator<<()成员函数 237
9.5.7 main()函数 237
9.6本章小结 238
9.7问与答 239
9.8问题讨论 240
9.9习题 240
第10章 继承与多态:Blackjack 241
10.1继承简介 241
10.1.1 Simple Boss程序简介 242
10.1.2从基类派生 244
10.1.3从派生类实例化对象 245
10.1.4使用继承成员 245
10.2继承访问权的控制 246
10.2.1 Simple Boss 2.0程序简介 246
10.2.2对类成员使用访问修饰符 247
10.2.3使用访问修饰符修饰派生类 247
10.3调用与重写基类成员函数 248
10.3.1 Overriding Boss程序简介 248
10.3.2调用基类构造函数 250
10.3.3声明虚基类成员函数 250
10.3.4重写虚基类成员函数 251
10.3.5调用基类成员函数 251
10.4在派生类中使用重载赋值运算符与拷贝构造函数 252
10.5多态简介 253
10.5.1 Polymorphic Bad Guy程序简介 253
10.5.2使用基类指针指向派生类对象 255
10.5.3定义虚析构函数 256
10.6使用抽象类 257
10.6.1 Abstract Creature程序简介 257
10.6.2声明纯虚函数 258
10.6.3从抽象类派生类 259
10.7 Blackjack游戏简介 259
10.7.1类的设计 260
10.7.2规划游戏的逻辑 263
10.7.3 Card类 264
10.7.4 Hand类 265
10.7.5 GenericPlayer类 267
10.7.6 Player类 268
10.7.7 House类 269
10.7.8 Deck类 270
10.7.9 Game类 272
10.7.10 main()函数 275
10.8本章小结 277
10.9问与答 277
10.10问题讨论 278
10.11习题 279
附录A创建第一个C++程序 281
附录B运算符优先级 285
附录C关键字 287
附录D ASCII字符表 289
附录E转义序列 295