第一篇 基础知识篇 2
第1章 初识C++—— “Hello World!” 2
1.1 C++的历史背景 2
1.1.1 20世纪最伟大的发明——计算机 2
1.1.2 C++的发展历程 2
1.1.3 C++发展史中的杰出人物 3
1.2 Visual Studio 2010集成编译环境 4
1.2.1安装Visual Studio 2010 4
1.2.2卸载Visual Studio 2010. 9
1.2.3使用Visual Studio 2010创建一个C++控制台程序 11
1.2.4编写第一个C++程序“Hello World!” 13
1.3如何使用本书代码 16
1.4小结 17
第2章 与计算机交流的手段——数据的计算、输入与输出 17
2.1 C++语言基本要素 17
2.1.1标识符 17
2.1.2关键字 18
2.2数据类型 19
2.2.1数值类型 19
2.2.2字符类型 21
2.2.3布尔类型 21
2.3数据的输入与输出 21
2.3.1格式输出函数 21
2.3.2格式输入函数 24
2.3.3标准输出输入流 28
2.3.4流操作的控制 29
2.4运算符 34
2.4.1算术运算符 34
2.4.2关系运算符 35
2.4.3逻辑运算符 36
2.4.4赋值运算符 37
2.4.5位运算符 38
2.4.6移位运算符 39
2.4.7 sizeof运算符 40
2.4.8条件运算符 41
2.4.9逗号运算符 41
2.5结合性和优先级 41
2.6表达式 43
2.6.1算术表达式 43
2.6.2关系表达式 43
2.6.3条件表达式 43
2.6.4赋值表达式 44
2.6.5逻辑表达式 44
2.6.6逗号表达式 44
2.6.7表达式中的类型转换 45
2.7语句 48
2.8左值与右值 48
2.9上机实践 49
2.9.1计算三角形周长 49
2.9.2计算三角形边长 49
2.10小结 50
2.11习题 50
第3章 重要的逻辑工具——判断与循环 51
3.1条件判断 51
3.1.2 if-else语句 53
3.1.3嵌套的if-else语句 54
3.1.4使用条件运算符进行判断 57
3.1.5 switch判断语句 59
3.2循环语句 63
3.2.1 while循环语句 63
3.2.2 do-while循环 65
3.2.3 while与do-while的比较 66
3.2.4 for循环语句 67
3.3循环控制 71
3.3.1控制循环的变量 71
3.3.2 break语句 72
3.3.3 continue语句 73
3.3.4 goto语句 74
3.4循环嵌套 75
3.5上机实践 77
3.5.1图书的位置 77
3.5.2输出闰年 77
3.6小结 78
3.7习题 78
第4章 程序的模块——函数 80
4.1函数概述 80
4.1.1函数的结构 80
4.1.2函数的声明和使用 80
4.2函数参数 82
4.2.1形参与实参 82
4.2.2默认参数 82
4.3函数的返回值 83
4.3.1返回值 83
4.3.2空函数 84
4.4函数的递归调用 84
4.5重载函数 88
4.6生存周期与作用域 89
4.6.1变量的作用域 90
4.6.2变量的生存周期 91
4.7名称空间 97
4.8上机实践 97
4.8.1等差数列的和 97
4.8.2提款机的记录 97
4.9小结 98
4.10习题 98
第5章 内存访问——指针和引用 99
5.1指针 99
5.1.1变量与指针 99
5.1.2指针运算 103
5.1.3空类型指针与指向空的指针 105
5.1.4指针常量与指向常量的指针 106
5.2指针与函数 107
5.2.1指针传递参数 107
5.2.2函数指针 109
5.2.3空类型指针与函数 110
5.2.4指针与函数返回值 111
5.3指针与安全 112
5.3.1内存的分配方式 112
5.3.2内存安全 114
5.4引用 117
5.4.1引用的概述 117
5.4.2右值引用 119
5.5函数与引用 120
5.5.1使用引用传递参数 120
5.5.2指针与引用 121
5.5.3右值引用传递参数 122
5.6上机实践 123
5.6.1水桶的平衡 123
5.6.2分步计算 124
5.7小结 124
5.8习题 124
第6章 一即是全,全即是一——数组和字符串 126
6.1一维数组 126
6.1.1一维数组的声明 126
6.1.2一维数组的元素 126
6.1.3一维数组的初始化 127
6.2二维数组 128
6.2.1二维数组的声明 128
6.2.2二维数组元素的使用 129
6.2.3二维数组的初始化 129
6.3字符数组 131
6.3.1声明一个字符串数组 131
6.3.2字符串数组赋值方式 132
6.3.3字符数组的一些说明 132
6.3.4字符串和字符串结束标志 132
6.3.5字符串处理函数 134
6.4指针与数组 138
6.4.1数组的存储 138
6.4.2指针与一维数组 139
6.4.3指针与二维数组 141
6.4.4指针与字符数组 145
6.4.5数组作为函数参数 147
6.4.6数组的动态分配 149
6.5字符串类型 150
6.5.1使用本地字符串类型string 150
6.5.2连接string字符串 151
6.5.3比较string字符串 151
6.5.4 string字符串和数组 152
6.6上机实践 153
6.6.1名字排序 153
6.6.2查找数字 154
6.7小结 154
6.8习题 155
第二篇 核心技术篇 158
第7章 面向对象——类的构造 158
7.1学会面向对象的编程思想 158
7.1.1面向对象与面向过程编程 159
7.1.2面向对象编程 160
7.1.3面向对象的特点 160
7.2类与对象 161
7.2.1类的声明与定义 161
7.2.2头文件与源文件 162
7.2.3类的实现 162
7.2.5访问类的成员 167
7.3类的构造函数 168
7.3.1构造函数的概念 168
7.3.2构造函数的定义和使用 168
7.4类的析构函数 171
7.5类的静态成员 172
7.6对象的指针 175
7.7this指针 176
7.8对象与复制 178
7.9const对象 180
7.10对象数组 182
7.11运算符的重载 184
7.11.1算术运算符的重载 184
7.11.2比较运算符的重载 186
7.12上机实践 188
7.12.1用户与留言 188
7.12.2挑选硬盘 188
7.13小结 189
7.14习题 189
第8章 并非每个人都会说汉语——类的继承和派生 190
8.1继承 190
8.1.1类的继承 190
8.1.2类成员的可访问性 192
8.1.3继承后可访问性 194
8.1.4构造函数访问顺序 196
8.1.5子类显示调用父类构造函数 197
8.1.6子类隐藏父类的成员函数 198
8.1.7嵌套类 201
8.2多重继承 203
8.2.1多重继承的定义 203
8.2.2二义性 204
8.2.3多重继承的构造顺序 205
8.3多态 206
8.3.1虚函数概述 206
8.3.2利用虚函数实现动态绑定 207
8.3.3虚继承 208
8.4抽象类 210
8.4.1纯虚函数 210
8.4.2实现抽象类中的成员函数 211
8.5友元 213
8.5.1友元概述 213
8.5.2友元类 215
8.6上机实践 216
8.6.1学生类的设计 216
8.6.2等边多边形 217
8.7小结 218
8.8习题 218
第9章 量身定做——模板 219
9.1函数模板 219
9.1.1函数模板的定义 219
9.1.2函数模板的作用 220
9.1.3重载函数模板 222
9.2类模板 223
9.2.1类模板的定义与声明 223
9.2.2简单类模板 225
9.2.3默认模板参数 225
9.2.4为具体类型的参数提供默认值 226
9.2.5有界数组模板 227
9.3模板的使用 229
9.3.1定制类模板 229
9.3.2定制类模板成员函数 231
9.3.3模板部分定制 232
9.4链表类模板 233
9.4.2链表类模板 236
9.4.3类模板的静态数据成员 238
9.5上机实践 239
9.5.1除法函数模板 239
9.5.2取得数据间最大值 240
9.6小结 240
9.7习题 240
第三篇 高级应用篇 242
第10章 快刀斩乱麻——代码整理 242
10.1结构体 242
10.2数据类型别名——typedef 242
10.3枚举类型 244
10.4类型推导 248
10.5异常处理 250
10.5.1抛出异常 250
10.5.2异常捕获 251
10.5.3异常匹配 254
10.5.4标准异常 256
10.6宏定义 256
10.7上机实践 260
10.7.1扑克牌的牌面 260
10.7.2使用参数宏求圆面积 261
10.8小结 261
10.9习题 263
第11章 取之有道,用之有节——STL标准模板库 263
11.1预备知识 263
11.1.1标准模板库概述 263
11.1.2顺序线性结构 263
11.1.3操作 264
11.1.5队列 264
11.1.7图结构 265
11.2容器 266
11.2.1容器与容器适配器 266
11.2.2迭代器与容器 267
11.2.3 vector容器 267
11.2.4 list容器 270
11.2.5关联容器 273
11.3算法 275
11.3.1 for each函数 275
11.3.2 fill函数 275
11.3.3 sort函数 276
11.3.4 transform函数 277
11.4 lambda表达式 278
11.5上机实践 281
11.5.1迭代输出信息 281
11.5.2计算平均值 282
11.6小结 282
11.7习题 282
第12章 内存与硬盘的交流——文件操作 283
12.1文件流 283
12.1.1 C++中的流类库 283
12.1.2类库的使用 284
12.1.3 ios类中的枚举常量 284
12.1.4流的输入/输出 284
12.2文件打开 285
12.2.1打开方式 285
12.2.2默认打开模式 286
12.2.3打开文件的同时创建文件 287
12.3文件的读写 288
12.3.1文件流 288
12.3.2写文本文件 290
12.3.3读取文本文件 290
12.3.4二进制文件的读写 291
12.3.5实现文件的复制 292
12.4文件指针的移动操作 293
12.4.1文件错误与状态 294
12.4.2文件的追加 294
12.4.3文件结尾的判断 295
12.4.4在指定位置读写文件 297
12.5文件和流的关联与分离 298
12.6删除文件 300
12.7上机实践 300
12.7.1记录类的信息 300
12.7.2读取文件信息 301
12.8小结 302
12.9习题 302
第四篇 项目实战篇 304
第13章 综合实战——商品销售系统 304
13.1商品类的设计 304
13.2销售系统的设计 305
13.3销售记录功能 316
第14章 综合实战——吃豆子游戏 320
14.1 Windows窗口应用程序 320
14.1.1建立Windows窗口应用程序 320
14.1.2 Windows窗体的产生 322
14.1.3 Windows消息循环 325
14.1.4常用绘图GDI 327
14.2制作PacMan 330
14.2.1 PacMan程序框架初步分析 330
14.2.2碰撞检测的实现 333
14.2.3地图类的设计 336
14.2.4数据更新 338
14.2.5绘图 346
14.2.6客户端设计 350
14.3小结 356