第1篇 入门篇 2
第1章 初识C++ 2
1.1 C++的历史背景 3
1.1.1 计算机的问世 3
1.1.2 C++发展历程 3
1.1.3 C++中的杰出人物 4
1.2 C++语言特点 5
1.3 Visual Studio 2010集成编译环境 6
1.3.1 安装Visual Studio 2010 6
1.3.2 卸载Visual Studio 2010 11
1.3.3 使用Visual Studio 2010创建一个C++控制台程序 12
1.3.4 编写第一个C++程序“Hello World!” 15
1.4 本书代码使用指南 16
1.5 本章小结 16
第2章 认识C++程序 17
2.1 我的第一个C++程序 18
2.1.1 创建第一个C++程序 18
2.1.2 C++程序的基本组成 20
2.2 C++的常用概念 21
2.2.1 预处理命令 21
2.2.2 注释 21
2.2.3 main函数 22
2.2.4 函数体 22
2.2.5 函数返回值 22
2.3 初步了解函数 22
2.3.1 一个简单的函数 22
2.3.2 函数的传参 24
2.3.3 函数的返回值、参数与变量 25
2.3.4 函数的声明和定义 26
2.3.5 变量 29
2.4 C++语言基本要素 30
2.4.1 解读标识符 31
2.4.2 关键字 31
2.4.3 定义和使用常量 32
2.4.4 变量的应用 32
2.5 C++代码编写规范 33
2.5.1 代码写规范的好处 33
2.5.2 如何将代码写规范 34
2.6 综合应用 34
2.7 本章常见错误 35
2.8 本章小结 35
2.9 跟我上机 35
第3章 变量和数据类型 37
3.1 常量 38
3.1.1 整型常量 38
3.1.2 实型常量 38
3.1.3 字符常量 39
3.1.4 字符串常量 40
3.1.5 其他常量 41
3.2 变量 41
3.2.1 标识符 41
3.2.2 变量与变量说明 42
3.2.3 整型变量 42
3.2.4 实型变量 43
3.2.5 变量赋值 43
3.2.6 变量赋初值 44
3.2.7 字符变量 44
3.3 常用数据类型 45
3.3.1 定义数值类型 46
3.3.2 字符类型 47
3.3.3 布尔类型 47
3.4 输入与输出数据 48
3.4.1 通过printf格式输出数据 48
3.4.2 利用scanf格式输入数据 51
3.4.3 标准I/O流 54
3.4.4 控制输入/输出格式 56
3.5 综合应用 60
3.5.1 计算贷款支付额 60
3.5.2 计算函数值 61
3.6 本章常见错误 62
3.7 本章小结 62
3.8 跟我上机 63
第4章 运算符与表达式 64
4.1 C++中的运算符 65
4.1.1 算术运算符 65
4.1.2 关系运算符 66
4.1.3 逻辑运算符 67
4.1.4 赋值运算符 68
4.1.5 位运算符 69
4.1.6 移位运算符 70
4.1.7 sizeof运算符 73
4.1.8 条件运算符 73
4.1.9 逗号运算符 74
4.2 结合性和优先级 74
4.3 表达式 75
4.3.1 算术表达式 76
4.3.2 关系表达式 76
4.3.3 条件表达式 76
4.3.4 赋值表达式 76
4.3.5 逻辑表达式 77
4.3.6 逗号表达式 77
4.3.7 表达式中的类型转换 78
4.4 语句概述 81
4.5 判断左值与右值 82
4.6 综合应用 83
4.6.1 计算三角形周长 83
4.6.2 计算三角形的边长 83
4.7 本章常见错误 84
4.7.1 注意=和== 84
4.7.2 不要混淆strlen和sizeof 84
4.7.3 对浮点数求余 84
4.8 本章小结 84
4.9 跟我上机 85
第5章 条件判断语句 86
5.1 决策分支 87
5.2 判断语句 87
5.2.1 第一种形式的判断语句——if语句 87
5.2.2 第二种形式的判断语句——if-else语句 89
5.2.3 第三种形式的判断语句——多次判断语句 91
5.3 使用条件运算符进行判断 93
5.4 switch判断语句 94
5.5 判断语句的嵌套 99
5.6 综合应用 101
5.6.1 图书的位置 101
5.6.2 计算增加后的工资 102
5.7 本章常见错误 103
5.7.1 注意case后不要跟变量 103
5.7.2 if else的匹配问题 104
5.7.3 if判断表达式的比较问题 104
5.8 本章小结 104
5.9 跟我上机 104
第6章 循环控制语句 106
6.1 while循环 107
6.2 do…while循环 109
6.3 while和do…while比较 110
6.4 for循环 112
6.5 循环控制 115
6.5.1 控制循环的变量 116
6.5.2 break语句 117
6.5.3 continue语句 118
6.5.4 goto语句 119
6.6 循环嵌套 120
6.7 综合应用 122
6.7.1 阿姆斯壮数 122
6.7.2 巴斯卡三角形 123
6.7.3 输出闰年 124
6.8 本章常见错误 126
6.8.1 break和continue语句的区别 126
6.8.2 goto的问题 126
6.9 本章小结 126
6.10 跟我上机 127
第7章 封装函数使程序模块化 128
7.1 函数概述 129
7.1.1 定义函数 129
7.1.2 声明和使用函数 129
7.2 函数的参数 130
7.2.1 形参与实参 130
7.2.2 设置默认值 131
7.3 从函数中返回 132
7.3.1 函数返回值 132
7.3.2 了解空函数 133
7.4 递归调用函数 133
7.5 重载函数的使用 137
7.6 生存周期与作用域 139
7.6.1 变量的作用域 139
7.6.2 变量的生存周期 140
7.6.3 变量的储存方式 141
7.7 名称空间 145
7.8 综合应用 147
7.8.1 等差数列求和 147
7.8.2 提款机的记录 148
7.9 本章常见错误 149
7.9.1 函数中返回的数组地址无效 149
7.9.2 声明函数时不要忘记加分号 149
7.9.3 尽量不要用using namespace std 149
7.10 本章小结 150
7.11 跟我上机 150
第8章 C++中的指针 152
8.1 指针概述 153
8.1.1 保存变量地址 153
8.1.2 指针的运算 157
8.1.3 指向空的指针与空类型指针 159
8.1.4 指向常量的指针与指针常量 160
8.2 指针在函数中的应用 162
8.2.1 传递地址 162
8.2.2 指向函数入口地址 163
8.2.3 空指针调用函数 164
8.2.4 从函数中返回指针 165
8.3 安全使用指针 167
8.3.1 内存分配 167
8.3.2 内存安全 169
8.4 综合应用 172
8.4.1 水桶的平衡 172
8.4.2 分步计算 173
8.4.3 显示数组元素 173
8.5 本章常见错误 174
8.5.1 文字常量区不可修改 174
8.5.2 重复释放内存,错误提示“Debug Assertion Failed!” 175
8.5.3 释放空间以后,记得给指针赋空 175
8.5.4 (*p)-输出的不是想要的值 175
8.6 本章小结 176
8.7 跟我上机 176
第9章 C++中的引用 177
9.1 引用概述 178
9.1.1 引用的概念 178
9.1.2 引用就是别名常量 179
9.1.3 右值引用 180
9.2 引用在函数中的应用 181
9.2.1 引用作为函数的形参 181
9.2.2 指针与引用 182
9.2.3 右值引用传递参数 184
9.3 综合应用 185
9.4 本章常见错误 186
9.4.1 指针和引用分别应该什么时候用 186
9.4.2 在哪里创建,就在哪里释放指针 186
9.4.3 指针和引用混合使用 186
9.4.4 指针的特殊写法 187
9.5 本章小结 187
9.6 跟我上机 187
第10章 使用数组获取连续空间 188
10.1 一维数组 189
10.1.1 声明一维数组 189
10.1.2 一维数组的元素 189
10.1.3 初始化一维数组 190
10.2 二维数组 191
10.2.1 声明二维数组 191
10.2.2 引用二维数组元素 192
10.2.3 初始化二维数组 193
10.3 字符数组 195
10.3.1 声明一个字符串数组 195
10.3.2 字符串数组赋值 195
10.3.3 字符数组的一些说明 195
10.3.4 越界引用 196
10.3.5 字符串处理函数 198
10.4 指针与数组 203
10.4.1 存储数组元素 203
10.4.2 保存一维数组首地址 203
10.4.3 保存二维数组首地址 205
10.4.4 指针与字符数组 210
10.4.5 数组作函数参数 212
10.4.6 动态分配数组 214
10.5 字符串类型 215
10.5.1 使用本地字符串类型string 215
10.5.2 连接string字符串 216
10.5.3 比较string字符串 217
10.5.4 定义string类型数组 218
10.6 综合应用 219
10.6.1 名字排序 219
10.6.2 查找数字 220
10.6.3 求平均身高 221
10.7 本章常见错误 222
10.7.1 不能对数组名直接赋值 222
10.7.2 sizeof(a)和sizeof(a+1) 223
10.7.3 注意区分数组指针和指针数组 223
10.8 本章小结 223
10.9 跟我上机 224
第2篇 提高篇 226
第11章 面向对象编程 226
11.1 面向对象的编程思想 227
11.1.1 面向过程 228
11.1.2 面向对象 228
11.1.3 面向对象编程的特点 229
11.2 类与对象 229
11.2.1 声明与定义类 230
11.2.2 在源文件中包含头文件 231
11.2.3 实现一个类 231
11.2.4 实例化一个对象 236
11.2.5 访问类成员 236
11.3 类的构造与析构 239
11.3.1 构造函数概述 239
11.3.2 利用构造函数初始化成员变量 239
11.3.3 析构一个类 242
11.4 定义静态成员 244
11.5 通过指针操作对象 247
11.6 隐含的this指针 248
11.7 复制对象 250
11.8 声明const对象 252
11.9 申请对象数组 254
11.10 C++中的友元 257
11.10.1 友元机制 257
11.10.2 定义友元类 259
11.11 重载运算符 260
11.11.1 重载算术运算符 260
11.11.2 重载比较运算符 262
11.12 综合应用 263
11.12.1 用户与留言 263
11.12.2 挑选硬盘 265
11.13 本章常见错误 266
11.13.1 声明类时提示编译错误 266
11.13.2 对比const与#define 267
11.13.3 new和delete要配对使用 267
11.14 本章小结 267
11.15 跟我上机 267
第12章 从基类到派生类 269
12.1 类的继承 270
12.1.1 定义派生类 270
12.1.2 访问类成员 272
12.1.3 类的派生方式 273
12.1.4 父类和子类的构造顺序 276
12.1.5 子类显示调用父类构造函数 277
12.1.6 子类隐藏父类的成员函数 279
12.1.7 嵌套定义多个类 282
12.2 多重继承 284
12.2.1 声明多重继承的派生类 284
12.2.2 注意避免二义性 285
12.2.3 多重继承的构造顺序 286
12.3 C++的多态性 288
12.3.1 虚函数概述 288
12.3.2 动态绑定 288
12.3.3 虚继承机制 290
12.4 抽象类介绍 292
12.4.1 创建纯虚函数 292
12.4.2 实现抽象类中的成员函数 293
12.5 综合应用 295
12.5.1 学生类的设计 295
12.5.2 等边多边形 296
12.5.3 教师职位信息 298
12.6 本章常见错误 299
12.6.1 静态成员函数不能访问普通成员变量 299
12.6.2 类初始化时不能直接给数组名赋值 299
12.6.3 派生后的访问权限总结 300
12.7 本章小结 300
12.8 跟我上机 300
第13章 C++模板的使用 303
13.1 函数模板 304
13.1.1 定义函数模板 304
13.1.2 使用函数模板 305
13.1.3 重载函数模板 307
13.2 类模板 308
13.2.1 定义类模板 308
13.2.2 执行时指定参数 310
13.2.3 设置默认模板参数 311
13.2.4 为具体类型的参数提供默认值 312
13.2.5 越界检测 313
13.3 模板的使用方法 315
13.3.1 定制类模板 315
13.3.2 定制类模板成员函数 317
13.3.3 部分定制模板 318
13.4 链表类模板 319
13.4.1 建立单向链表 320
13.4.2 链表类模板的使用 322
13.4.3 类模板的静态数据成员 324
13.5 综合应用 326
13.5.1 除法函数模板 326
13.5.2 取得数据间最大值 327
13.5.3 不同类型数组管理 328
13.6 本章常见错误 330
13.6.1 函数模板与类模板的区别 330
13.6.2 成员函数在类外实现时不要带默认值 330
13.6.3 函数默认顺序从右向左 330
13.7 本章小结 330
13.8 跟我上机 331
第14章 代码整理 332
14.1 结构体概述 333
14.2 重命名数据类型 333
14.3 枚举类型的应用 335
14.4 类型推导 340
14.5 异常处理 341
14.5.1 抛出异常 342
14.5.2 捕获异常 344
14.5.3 异常匹配 347
14.5.4 标准异常 349
14.6 使用宏定义替换复杂的数据 349
14.7 综合应用 353
14.7.1 扑克牌的牌面 353
14.7.2 使用带参数的宏求圆面积 354
14.7.3 综合成绩 355
14.8 本章常见错误 356
14.8.1 注意带参数的宏 356
14.8.2 结构体成员的引用 356
14.8.3 结构体字节对齐问题 356
14.8.4 用指针动态申请结构体内存时失败 357
14.9 本章小结 357
14.10 跟我上机 358
第15章 掌握C++标准模板库 359
15.1 几种常见数据结构 360
15.1.1 简述STL 360
15.1.2 顺序线性结构 360
15.1.3 基本操作 360
15.1.4 栈结构 361
15.1.5 队列结构 361
15.1.6 链表结构 361
15.1.7 图结构 362
15.2 使用容器管理数据 362
15.2.1 对比容器适配器与容器 362
15.2.2 对比迭代器与容器 363
15.2.3 vector容器 364
15.2.4 list容器 367
15.2.5 关联容器 370
15.3 常用算法 372
15.3.1 for each函数 372
15.3.2 fill函数 373
15.3.3 sort函数 374
15.3.4 transform函数 375
15.4 lambda表达式 376
15.5 综合应用 379
15.5.1 迭代输出信息 379
15.5.2 计算平均值 380
15.6 本章常见错误 380
15.6.1 不要直接使用头指针操作链表 380
15.6.2 区分内存中的栈和数据结构中的栈 381
15.6.3 数组和容器的区别 381
15.7 本章小结 381
15.8 跟我上机 381
第16章 利用文件处理数据 383
16.1 文件流概述 384
16.1.1 C++中的流类库 384
16.1.2 使用类库 384
16.1.3 ios类中的枚举常量 385
16.1.4 使用流进行输出 385
16.2 打开文件 386
16.2.1 文件打开方式 386
16.2.2 默认打开模式 387
16.2.3 创建并打开文件 388
16.3 读写文件 389
16.3.1 文件流分类 389
16.3.2 写文本文件 391
16.3.3 读取文本文件 392
16.3.4 二进制文件的读写 393
16.3.5 实现文件复制 394
16.4 移动文件指针 395
16.4.1 文件错误与状态 395
16.4.2 向文件追加写入 396
16.4.3 文件结尾的判断 397
16.4.4 在指定位置读写文件 399
16.5 文件和流的关联和分离 401
16.6 删除文件 402
16.7 综合应用 403
16.7.1 记录类的信息 403
16.7.2 读取文件信息 404
16.8 本章常见错误 405
16.8.1 文件打开要记得关闭 405
16.8.2 peek不能用于ofstream 405
16.8.3 忘记调回指针,读不到内容 405
16.9 本章小结 405
16.10 跟我上机 406
第3篇 实战篇 410
第17章 C++语言游戏开发 410
17.1 模拟ATM机界面程序 411
17.1.1 概述 411
17.1.2 需求分析 411
17.1.3 设计思路 411
17.1.4 详细设计 411
17.1.5 程序代码 415
17.1.6 小结 418
17.2 猜数字游戏 418
17.2.1 概述 418
17.2.2 需求分析 418
17.2.3 系统设计 419
17.2.4 程序预览 419
17.2.5 设计思路 421
17.2.6 文件引用 421
17.2.7 主要功能实现 422
17.2.8 小结 426
17.3 吃豆子游戏 426
17.3.1 PacMan程序框架初步分析 426
17.3.2 碰撞检测的实现 429
17.3.3 地图类的设计 432
17.3.4 数据更新 435
17.3.5 绘图 443
17.3.6 窗口设计 448
17.3.7 小结 455
第18章 人事考勤管理系统(Visual Studio 2010和SQL Server 2008实现) 456
18.1 开发背景 457
18.2 需求分析 457
18.3 系统设计 457
18.3.1 系统目标 457
18.3.2 系统功能结构 458
18.3.3 系统预览 458
18.3.4 业务流程图 458
18.3.5 数据库设计 459
18.4 公共模块设计 461
18.5 主窗体设计 466
18.6 用户登录模块设计 469
18.6.1 用户登录模块概述 469
18.6.2 用户登录技术分析 469
18.6.3 用户登录实现过程 470
18.7 用户管理模块设计 471
18.7.1 用户管理模块概述 471
18.7.2 用户管理技术分析 471
18.7.3 用户管理实现过程 472
18.7.4 单元测试 474
18.8 部门管理模块设计 475
18.8.1 部门管理模块概述 475
18.8.2 部门管理技术分析 475
18.8.3 部门管理实现过程 476
18.9 人员信息管理模块设计 478
18.9.1 人员信息管理模块概述 478
18.9.2 人员信息管理技术分析 479
18.9.3 人员信息管理实现过程 479
18.10 考勤管理模块设计 485
18.10.1 考勤管理模块概述 485
18.10.2 考勤管理技术分析 486
18.10.3 考勤管理实现过程 487
18.11 考勤汇总查询模块设计 492
18.11.1 考勤汇总查询模块概述 492
18.11.2 考勤汇总查询技术分析 492
18.11.3 考勤汇总查询实现过程 493
18.12 开发技巧与难点分析 496
18.12.1 调用动态链接库设计界面 496
18.12.2 主窗口的界面显示 497
18.13 本章小结 498