第1篇 基础知识 2
第1章 绪论 2
1.1 C++历史背景 3
1.1.1 20世纪最伟大的发明 3
1.1.2 C++发展历程 3
1.1.3 C++中的杰出人物 4
1.2常用开发环境 5
1.2.1 VisualC++6.0 5
1.2.2 Visual Studio2017 6
1.2.3 GCC/G++ 7
1.2.4 Dev-C 7
1.2.5 Eclipse 8
1.3认知C++程序代码 8
1.4 C++工程项目文件 9
1.5使用VisualC++6.0创建程序 10
1.6编译与连接过程 13
1.7 C++的特点 16
1.8小结 16
第2章 数据类型 17
2.1第一个C++程序 18
2.1.1 #include指令 18
2.1.2注释 18
2.1.3 main函数 19
2.1.4函数体 19
2.1.5函数返回值 19
2.2常量及符号 19
2.2.1整型常量 20
2.2.2实型常量 21
2.2.3字符常量 21
2.2.4字符串常量 22
2.2.5其他常量 23
2.3变量 23
2.3.1标识符 23
2.3.2变量与变量声明 24
2.3.3整型变量 24
2.3.4实型变量 25
2.3.5变量赋值 25
2.3.6变量赋初值 26
2.3.7字符变量 26
2.4常用数据类型 27
2.4.1定义数值类型 28
2.4.2字符类型 30
2.4.3布尔类型 30
2.5数据输入与输出 30
2.5.1控制台屏幕 30
2.5.2 C++语言中的流 31
2.5.3流操作的控制 33
2.6小结 40
2.7实践与练习 40
第3章 表达式与语句 41
3.1运算符 42
3.1.1算术运算符 42
3.1.2关系运算符 43
3.1.3逻辑运算符 44
3.1.4赋值运算符 45
3.1.5位运算符 46
3.1.6移位运算符 47
3.1.7 sizeof运算符 50
3.1.8条件运算符 50
3.1.9逗号运算符 50
3.2结合性和优先级 51
3.3表达式 52
3.3.1算术表达式 53
3.3.2关系表达式 53
3.3.3条件表达式 53
3.3.4赋值表达式 53
3.3.5逻辑表达式 53
3.3.6逗号表达式 54
3.3.7表达式中的类型转换 55
3.4语句 57
3.5判断左值与右值 58
3.6小结 59
3.7实践与练习 59
第4章 条件判断语句 60
4.1决策分支 61
4.2判断语句 62
4.2.1第一种形式的判断语句 62
4.2.2第二种形式的判断语句 63
4.2.3第三种形式的判断语句 65
4.3使用条件运算符进行判断 67
4.4 switch语句 68
4.5判断语句的嵌套 72
4.6小结 74
4.7实践与练习 74
第5章 循环语句 75
5.1 while循环 76
5.2 do…while循环 77
5.3 while与do…while比较 79
5.4 for循环语句 80
5.5循环控制 84
5.5.1控制循环的变量 84
5.5.2 break语句 85
5.5.3 continue语句 86
5.5.4 goto语句 87
5.6循环嵌套 88
5.7循环应用实例 90
5.7.1阿姆斯壮数 90
5.7.2巴斯卡三角形 91
5.7.3对输入的分数进行排名 92
5.8小结 93
5.9实践与练习 94
第6章 函数 95
6.1函数概述 96
6.1.1函数的定义 96
6.1.2函数的声明 96
6.2函数参数及返回值 97
6.2.1返回值 97
6.2.2空函数 98
6.2.3形参与实参 99
6.2.4默认参数 99
6.2.5可变参数 101
6.3函数调用 102
6.3.1传值调用 102
6.3.2嵌套调用 104
6.3.3递归调用 105
6.4变量作用域 108
6.5重载函数 109
6.6内联函数 110
6.7变量的存储类别 111
6.7.1 auto变量 112
6.7.2静态变量 113
6.7.3 register变量 115
6.7.4 extern变量 115
6.8小结 116
6.9实践与练习 116
第7章 数组、指针和引用 117
7.1一维数组 118
7.1.1一维数组的声明 118
7.1.2一维数组元素的引用 118
7.1.3一维数组的初始化 119
7.2二维数组 120
7.2.1二维数组的声明 120
7.2.2二维数组元素的引用 121
7.2.3二维数组的初始化 121
7.3字符数组 124
7.4指针 131
7.4.1变量与指针 131
7.4.2指针运算符和取地址运算符 134
7.4.3指针运算 136
7.4.4指向空的指针与空类型指针 138
7.4.5指向常量的指针与指针常量 139
7.5指针与数组 140
7.5.1数组的存储 140
7.5.2指针与一维数组 141
7.5.3指针与二维数组 143
7.5.4指针与字符数组 148
7.6指针在函数中的应用 150
7.6.1传递地址 150
7.6.2指向函数的指针 152
7.6.3空指针调用函数 153
7.6.4从函数中返回指针 154
7.7指针数组 155
7.8安全使用指针 158
7.8.1内存分配 158
7.8.2内存安全 160
7.9引用 163
7.9.1引用概述 163
7.9.2使用引用传递参数 166
7.9.3指针传递参数 167
7.9.4数组做函数参数 168
7.10小结 170
7.11实践与练习 171
第8章 构造数据类型 172
8.1结构体 173
8.1.1结构体定义 173
8.1.2结构体变量 173
8.1.3结构体成员及初始化 174
8.1.4结构体的嵌套 176
8.1.5结构体大小 178
8.2重命名数据类型 180
8.3结构体与函数 182
8.3.1结构体变量做函数参数 182
8.3.2结构体指针做函数参数 183
8.4结构体数组 184
8.4.1结构体数组声明与引用 184
8.4.2指针访问结构体数组 185
8.5共用体 186
8.5.1共用体的定义与声明 187
8.5.2共用体的大小 188
8.5.3共用体的特点 189
8.6枚举类型 189
8.6.1枚举类型的声明 189
8.6.2枚举类型变量 190
8.6.3枚举类型的运算 191
8.7自定义数据类型 193
8.8异常处理 194
8.8.1抛出异常 194
8.8.2捕获异常 196
8.8.3异常匹配 199
8.8.4标准异常 201
8.9使用宏定义替换复杂的数据 202
8.10小结 205
8.11实践与练习 205
第2篇 核心技术 208
第9章 面向对象编程 208
9.1面向对象概述 209
9.2面向对象与面向过程编程 210
9.2.1面向过程编程 210
9.2.2面向对象编程 210
9.2.3面向对象的特点 211
9.3统一建模语言 211
9.3.1统一建模语言概述 211
9.3.2统一建模语言的结构 212
9.3.3面向对象的建模 214
9.4小结 214
第10章 类和对象 215
10.1 C++类 216
10.1.1类概述 216
10.1.2类的声明与定义 216
10.1.3类的实现 217
10.1.4对象的声明 222
10.2构造函数 224
10.2.1构造函数概述 224
10.2.2复制构造函数 226
10.3析构函数 228
10.4类成员 230
10.4.1访问类成员 230
10.4.2内联成员函数 231
10.4.3静态类成员 232
10.4.4隐藏的this指针 234
10.4.5嵌套类 236
10.4.6局部类 237
10.5友元 238
10.5.1友元概述 238
10.5.2友元类 240
10.5.3友元方法 241
10.6命名空间 243
10.6.1使用命名空间 243
10.6.2定义命名空间 244
10.6.3在多个文件中定义命名空间 246
10.6.4定义嵌套的命名空间 248
10.6.5定义未命名的命名空间 249
10.7小结 250
10.8实践与练习 250
第11章 继承与派生 251
11.1继承 252
11.1.1类的继承 252
11.1.2继承后可访问性 254
11.1.3构造函数访问顺序 257
11.1.4子类显示调用父类构造函数 258
11.1.5子类隐藏父类的成员函数 260
11.2重载运算符 263
11.2.1重载运算符的必要性 263
11.2.2重载运算符的形式与规则 264
11.2.3重载运算符的运算 266
11.2.4转换运算符 268
11.3多重继承 270
11.3.1多重继承定义 270
11.3.2二义性 271
11.3.3多重继承的构造顺序 272
11.4多态 274
11.4.1虚函数概述 274
11.4.2利用虚函数实现动态绑定 274
11.4.3虚继承 276
11.5抽象类 278
11.5.1纯虚函数 278
11.5.2实现抽象类中的成员函数 280
11.6小结 281
11.7实践与练习 281
第3篇 高级应用 284
第12章 模板 284
12.1函数模板 285
12.1.1函数模板的定义 285
12.1.2函数模板的作用 286
12.1.3重载函数模板 288
12.2类模板 289
12.2.1类模板的定义与声明 289
12.2.2简单类模板 291
12.2.3默认模板参数 292
12.2.4为具体类型的参数提供默认值 293
12.2.5有界数组模板 294
12.3模板的使用 296
12.3.1定制类模板 296
12.3.2定制类模板成员函数 297
12.4链表类模板 299
12.4.1链表 299
12.4.2链表类模板 301
12.4.3类模板的静态数据成员 304
12.5小结 305
12.6实践与练习 306
第13章 标准模板库 307
13.1几种常见数据结构 308
13.1.1简述STL 308
13.1.2顺序线性结构 308
13.1.3基本操作 308
13.1.4栈结构 309
13.1.5队列结构 309
13.1.6链表结构 310
13.1.7图结构 310
13.2序列容器 311
13.2.1对比容器适配器与容器 311
13.2.2对比迭代器与容器 311
13.2.3向量类模板 312
13.2.4双端队列类模板 316
13.2.5链表类模板 318
13.3结合容器 320
13.3.1 set类模板 321
13.3.2 multiset类模板 325
13.3.3 map类模板 330
13.3.4 multimap类模板 332
13.4算法 333
13.4.1非修正序列算法 333
13.4.2修正序列算法 336
13.4.3排序算法 340
13.4.4数值算法 347
13.5迭代器 352
13.5.1输出迭代器 352
13.5.2输入迭代器 352
13.5.3前向迭代器 353
13.5.4双向迭代器 354
13.5.5随机访问迭代器 355
13.6小结 356
13.7实践与练习 356
第14章 RTTI与异常处理 357
14.1 RTTI 358
14.1.1什么是RTTI 358
14.1.2 RTTI与引用 359
14.1.3 RTTI与多重继承 360
14.1.4 RTTI映射语法 361
14.2小结 363
第15章 程序调试 364
15.1选择正确的调试方法 365
15.2程序错误常见的4种类型 365
15.2.1语法错误 365
15.2.2连接错误 366
15.2.3运行时错误 366
15.2.4逻辑错误 367
15.3调试工具的使用 368
15.3.1创建调试程序 368
15.3.2进入调试状态 370
15.3.3 Watch窗口 370
15.3.4 Call Stack窗口 371
15.3.5 Memory窗口 371
15.3.6 Variables窗口 372
15.3.7 Registers窗口 372
15.3.8 Disassembly窗口 373
15.4调试的基本应用 373
15.4.1变量的跟踪与查看 373
15.4.2位置断点的使用 374
15.4.3数据断点的使用 377
15.5调试的高级应用 379
15.5.1在调试时修改变量的值 379
15.5.2在循环中调试 380
15.6小结 381
第16章 文件操作 382
16.1文件流 383
16.1.1 C++中的流类库 383
16.1.2类库的使用 383
16.1.3 ios类中的枚举常量 384
16.1.4流的输入/输出 384
16.2文件打开 385
16.2.1打开方式 385
16.2.2默认打开模式 386
16.2.3打开文件同时创建文件 387
16.3文件的读写 388
16.3.1文件流 388
16.3.2写文本文件 390
16.3.3读取文本文件 391
16.3.4二进制文件的读写 392
16.3.5实现文件复制 393
16.4文件指针移动操作 394
16.4.1文件错误与状态 394
16.4.2文件的追加 395
16.4.3文件结尾的判断 396
16.4.4在指定位置读写文件 397
16.5文件和流的关联和分离 399
16.6删除文件 400
16.7小结 401
16.8实践与练习 401
第17章 网络通信 402
17.1 TCP/IP协议 403
17.1.1 OSI参考模型 403
17.1.2 TCP/IP参考模型 403
17.1.3 IP地址 404
17.1.4数据包格式 405
17.2套接字 407
17.2.1 Winsocket套接字 407
17.2.2 Winsocket的使用 407
17.2.3套接字阻塞模式 412
17.2.4字节顺序 412
17.2.5面向连接流 413
17.2.6面向无连接流 413
17.3简单协议通信 414
17.3.1服务端 414
17.3.2客户端 416
17.3.3实例的运行 418
17.4小结 418
17.5实践与练习 418
第4篇 项目实战 420
第18章 人事考勤管理系统 420
18.1开发背景 421
18.2需求分析 421
18.3系统设计 421
18.3.1系统目标 421
18.3.2系统功能结构 422
18.3.3系统预览 422
18.3.4业务流程图 424
18.3.5数据库设计 424
18.4公共模块设计 427
18.5主窗体设计 432
18.6用户登录模块设计 434
18.6.1用户登录模块概述 434
18.6.2用户登录技术分析 435
18.6.3用户登录实现过程 435
18.7用户管理模块设计 437
18.7.1用户管理模块概述 437
18.7.2用户管理技术分析 437
18.7.3用户管理实现过程 438
18.7.4单元测试 440
18.8部门管理模块设计 441
18.8.1部门管理模块概述 441
18.8.2部门管理技术分析 441
18.8.3部门管理实现过程 442
18.9人员信息管理模块设计 445
18.9.1人员信息管理模块概述 445
18.9.2人员信息管理技术分析 445
18.9.3人员信息管理实现过程 445
18.10考勤管理模块设计 451
18.10.1考勤管理模块概述 451
18.10.2考勤管理技术分析 452
18.10.3考勤管理实现过程 453
18.11考勤汇总查询模块设计 458
18.11.1考勤汇总查询模块概述 458
18.11.2考勤汇总查询技术分析 459
18.11.3考勤汇总查询实现过程 460
18.12开发技巧与难点分析 463
18.12.1调用动态链接库设计界面 463
18.12.2主窗体的界面显示 464
18.13小结 464
附录A 465
A1 Visual C++ 6.0菜单命令及功能 466
A2 Visual C++ 6.0常用快捷键 467
附录B 470
B1 安装Visual Studio 2017 471
B2 Visual Studio 2017开发环境介绍 474
B3 Visual Studio 2017菜单功能 480
B4 Visual Studio 2017常用快捷键 483