第1篇 新手入门 3
第1章 绪论 3
1.1 C++历史背景 4
1.1.1 20世纪最伟大的发明——计算机 4
1.1.2 C++++发展历程 4
1.1.3 C++++发展中的杰出人物 5
1.2 Visual Studio 2010集成编译环境 6
1.2.1安装Visual Studio 2010. 6
1.2.2卸载Visual Studio 2010. 8
1.2.3使用Visual Studio 2010创建一个C++++控制台程序 9
1.2.4编写第一个C++++程序“Hello World” 11
1.3如何使用本书代码 12
1.4小结 12
第2章 数据类型 13
2.1第一个C++程序 14
2.1.1 #include指令 14
2.1.2注释 14
2.1.3 main函数 15
2.1.4函数体 15
2.1.5函数返回值 15
2.2数据类型概述 15
2.3常量及符号 16
2.3.1整型常量 17
2.3.2实型常量 17
2.3.3字符常量 18
2.3.4字符串常量 19
2.3.5其他常量 19
2.4变量 19
2.4.1标识符 20
2.4.2变量与变量声明 20
2.4.3整型变量 21
2.4.4实型变量 21
2.4.5变量赋值 22
2.4.6变量赋初值 22
2.4.7字符变量 22
2.5数据输入与输出 24
2.5.1控制台屏幕 24
2.5.2 C++++语言中的流 24
2.5.3流操作的控制 26
2.6实战 33
2.6.1输出一个正方形 33
2.6.2输出一个三角形 34
2.6.3简单求和程序 34
2.6.4数值型常量的使用 35
2.6.5将输入的小写字符转换为大写字符 35
2.6.6水池注水问题 36
2.7小结 37
2.8学习成果检验 37
第3章 表达式与语句 39
3.1运算符 40
3.1.1算术运算符 40
3.1.2关系运算符 41
3.1.3逻辑运算符 42
3.1.4赋值运算符 43
3.1.5位运算 44
3.1.6移位运算符 45
3.1.7 sizeof运算符 47
3.1.8条件运算符 48
3.1.9逗号运算符 48
3.2结合性和优先级 48
3.3表达式 50
3.3.1算术表达式 50
3.3.2关系表达式 50
3.3.3条件表达式 51
3.3.4赋值表达式 51
3.3.5逻辑表达式 51
3.3.6逗号表达式 51
3.3.7表达式中的类型转换 53
3.4语句 55
3.5实战 56
3.5.1求1~10的累加和 56
3.5.2求一个整数任意次方后的最后三位数 56
3.5.3婚礼上的谎言 57
3.5.4阿姆斯特朗数 58
3.5.5满足abcd=(ab+cd) 2的数 59
3.5.6最大公约数及最小公倍数 59
3.6小结 60
3.7学习成果检验 61
第4章 判断与循环 63
4.1条件判断 64
4.1.1 if语句 64
4.1.2 if…else语句 66
4.1.3嵌套的if-else语句 67
4.1.4使用条件运算符进行判断 71
4.1.5 switch判断语句 73
4.2循环语句 77
4.2.1 while循环语句 77
4.2.2 do…while循环 79
4.2.3 while与do…while比较 80
4.2.4 for循环语句 81
4.3循环控制 85
4.3.1控制循环的变量 85
4.3.2 break语句 86
4.3.3 continue语句 87
4.3.4 goto语句 88
4.4循环嵌套 90
4.5实战 92
4.5.1小写字母转大写 92
4.5.2百鸡百钱问题 92
4.5.3判断三角形类型 93
4.5.4简单计算器 94
4.5.5求总数问题 95
4.5.6加油站加油 96
4.5.7灯塔数量 97
4.5.8尼科彻斯定理 98
4.6小结 99
4.7学习成果检验 99
第5章 综合实验(1)——模拟ATM机界面程序 101
5.1概述 102
5.2需求分析 102
5.3设计思路 102
5.4详细设计 102
5.5程序代码 106
第2篇 进阶提高 113
第6章 数组 113
6.1一维数组 114
6.1.1如何定义和引用一维数组 114
6.1.2一维数组初始化 115
6.1.3一维数组应用 116
6.2二维数组 117
6.2.1如何定义和引用二维数组 117
6.2.2二维数组初始化 118
6.2.3二维数组应用 120
6.3多维数组 121
6.4字符数组 121
6.4.1如何定义和使用字符数组 121
6.4.2字符数组初始化 122
6.4.3字符数组的结束标志 125
6.4.4字符数组的输入和输出 126
6.4.5字符数组应用 128
6.5实战 129
6.5.1相邻元素之和 129
6.5.2选票系统 130
6.5.3统计学生成绩 131
6.5.4模拟比赛打分 132
6.5.5矩阵的转置 133
6.5.6设计魔方阵 135
6.5.7统计各种字符个数 136
6.6小结 137
6.7学习成果检验 137
第7章 函数 139
7.1函数概述 140
7.2函数的定义 142
7.2.1无参函数 142
7.2.2有参函数 142
7.2.3空函数 143
7.3返回语句 143
7.3.1从函数返回 143
7.3.2返回值 144
7.4函数参数 145
7.4.1形式参数与实际参数 145
7.4.2数组作函数参数 147
7.4.3 main参数 151
7.5函数的调用 153
7.5.1函数调用方式 153
7.5.2嵌套调用 153
7.5.3递归调用 155
7.6内部函数和外部函数 158
7.6.1内部函数 158
7.6.2外部函数 158
7.7局部变量和全局变量 160
7.7.1局部变量 160
7.7.2全局变量 161
7.8实战 163
7.8.1求数组元素中的最小值 163
7.8.2求直角三角形斜边 165
7.8.3小数分离 165
7.8.4判断素数 166
7.8.5递归解决分鱼问题 167
7.8.6字母检索 168
7.8.7求字符串中字符的个数 169
7.8.8打鱼晒网问题 170
7.9小结 172
7.10学习成果检验 172
第8章 指针和引用 173
8.1指针 174
8.1.1变量与指针 174
8.1.2指针运算符和取地址运算符 177
8.1.3指针运算 179
8.2指针与数组 180
8.2.1数组的存储 180
8.2.2指针与一维数组 180
8.2.3指针与二维数组 182
8.2.4指针与字符数组 186
8.3指向函数的指针 187
8.4指针与安全 188
8.4.1内存的分配方式 188
8.4.2内存安全 190
8.5引用 193
8.5.1左值与右值 193
8.5.2引用的概述 194
8.5.3右值引用 195
8.6函数与引用 196
8.6.1使用引用传递参数 196
8.6.2指针与引用 197
8.6.3右值引用传递参数 199
8.7实战 200
8.7.1使用左值引用实现整数排序 200
8.7.2查找成绩不及格的学生 201
8.7.3指针实现冒泡排序 202
8.7.4使用指针插入元素 203
8.7.5使用指针的指针输出字符串 204
8.7.6为二维数组动态分配内存并释放 205
8.7.7使用右值引用转换二进制为十进制 206
8.8小结 207
8.9学习成果检验 208
第9章 综合实验(2)——猜数字游戏 209
9.1概述 210
9.2需求分析 210
9.3系统设计 210
9.3.1设计目标 210
9.3.2开发及运行环境 210
9.4程序预览 211
9.5设计思路 213
9.6文件引用 213
9.7主要功能实现 213
9.7.1主函数 213
9.7.2猜数字 215
9.7.3光标定位 217
第3篇 核心技术 221
第10章 类和对象 221
10.1 C++类 222
10.1.1类概述 222
10.1.2类的声明与定义 222
10.1.3类的实现 224
10.1.4对象的声明 228
10.2构造函数 231
10.2.1构造函数概述 231
10.2.2复制构造函数 233
10.3析构函数 234
10.4类成员 236
10.4.1访问类成员 236
10.4.2内联成员函数 238
10.4.3静态类成员 239
10.4.4隐藏的this指针 241
10.4.5嵌套类 243
10.4.6局部类 244
10.5友元 245
10.5.1友元概述 245
10.5.2友元类 247
10.5.3友元方法 248
10.6命名空间 251
10.6.1使用命名空间 251
10.6.2定义命名空间 251
10.6.3在多个文件中定义命名空间 254
10.6.4定义嵌套的命名空间 255
10.6.5定义未命名的命名空间 257
10.7实战 257
10.7.1找出最高分 257
10.7.2计算平面两点间距离 260
10.7.3创建简单单向链表 261
10.7.4创建简单双向链表 265
10.7.5单向链表的逆置 269
10.7.6括号匹配检测 272
10.8小结 275
10.9学习成果检验 275
第11章 继承和派生 277
11.1继承 278
11.1.1类的继承 278
11.1.2继承后可访问性 280
11.1.3构造函数访问顺序 283
11.1.4子类隐藏父类的成员函数 284
11.2重载运算符 287
11.2.1重载运算符的必要性 288
11.2.2重载运算符的形式与规则 289
11.2.3重载运算符的运算 291
11.2.4转换运算符 293
11.3多重继承 295
11.3.1多重继承定义 295
11.3.2二义性 296
11.3.3多重继承的构造顺序 297
11.4多态 299
11.4.1虚函数概述 299
11.4.2利用虚函数实现动态绑定 299
11.4.3虚继承 301
11.5抽象类 303
11.5.1纯虚函数 303
11.5.2实现抽象类中的成员函数 305
11.6结构体 306
11.7实战 307
11.7.1接口的实现 307
11.7.2二维方阵的加减运算 310
11.7.3成员函数重写与虚函数继承的区别 312
11.7.4善用类指针 314
11.7.5链表合并 316
11.7.6柱状三维图形的体积 318
11.8小结 321
11.9学习成果检验 321
第12章 模板 323
12.1函数模板 324
12.1.1函数模板的定义 324
12.1.2函数模板的作用 325
12.1.3重载函数模板 327
12.2类模板 328
12.2.1类模板的定义与声明 328
12.2.2简单类模板 330
12.2.3默认模板参数 331
12.2.4为具体类型的参数提供默认值 332
12.2.5有界数组模板 333
12.3模板的使用 335
12.3.1定制类模板 335
12.3.2定制类模板成员函数 337
12.3.3模板部分定制 338
12.4 链表类模板 340
12.4.1链表 340
12.4.2使用链表类模板 342
12.4.3类模板的静态数据成员 345
12.5实战 347
12.5.1使用函数模板回收动态分配的内存 347
12.5.2三维坐标类模板 348
12.5.3多继承与函数模板 349
12.5.4实现链表模板的插入 350
12.5.5选择排序函数模板 351
12.6小结 353
12.7学习成果检验 354
第13章 文件操作 355
13.1文件流 356
13.1.1 C++++中的流类库 356
13.1.2类库的使用 356
13.1.3 ios类中的枚举常量 357
13.1.4流的输入/输出 357
13.2文件打开 358
13.2.1打开方式 358
13.2.2默认打开模式 359
13.2.3打开文件同时创建文件 360
13.3文件的读写 361
13.3.1文件流 361
13.3.2写文本文件 363
13.3.3读取文本文件 364
13.3.4二进制文件的读/写 365
13.3.5实现文件复制 366
13.4文件指针移动操作 368
13.4.1文件错误与状态 368
13.4.2文件的追加 368
13.4.3文件结尾的判断 370
13.4.4在指定位置读/写文件 371
13.5文件与流的关联和分离 373
13.6删除文件 374
13.7实战 375
13.7.1合并两个文件信息 375
13.7.2文件复制 376
13.7.3文件加密 377
13.7.4使用销毁的手段保护文件内容 379
13.7.5在文件中查找关键词出现的次数 380
13.8小结 382
13.9学习成果检验 382
第14章 综合实验(3)——图书管理系统 383
14.1系统设计 384
14.1.1需求分析 384
14.1.2系统目标 384
14.1.3系统功能结构 384
14.2图书类 385
14.3主程序 389
14.4添加图书 393
14.5显示图书信息 394
14.6删除图书 396
14.7小结 397
第4篇 高级应用 401
第15章 预处理 401
15.1本章知识体系 402
15.2不带参数的宏定义 402
15.3带参数的宏定义 404
15.4 #include命令 405
15.5条件编译 408
15.5.1 #if命令 408
15.5.2 #ifdef及#ifndef命令 410
15.5.3 #undef命令 412
15.5.4 #line命令 412
15.5.5 #pragma命令 413
15.6实战 413
15.6.1利用宏计算两个数的乘积 413
15.6.2利用宏求3个数中的最小数 414
15.6.3使用带参数的宏求圆面积 415
15.6.4利用文件包含设计输出模式 415
15.6.5使用条件编译隐藏密码 416
15.7疑难解惑 417
15.7.1 C++++语言中包括哪些预处理功能 417
15.7.2使用宏时需要注意些什么 417
15.7.3文件包含可以嵌套吗 418
15.8小结 418
15.9学习成果检验 418
第16章 STL标准模板库 419
16.1序列容器 420
16.1.1向量类模板 420
16.1.2双端队列类模板 422
16.1.3链表类模板 424
16.2结合容器 426
16.2.1 set类模板 426
16.2.2 multiset类模板 431
16.2.3 map类模板 435
16.2.4 multimap类模板 437
16.3算法 438
16.3.1非修正序列算法 438
16.3.2修正序列算法 441
16.3.3排序算法 445
16.3.4数值算法 451
16.4迭代器 455
16.4.1输出迭代器 455
16.4.2输入迭代器 456
16.4.3前向迭代器 457
16.4.4双向迭代器 457
16.4.5随机访问迭代器 458
16.5实战 459
16.5.1使用链表类模板加载学生类实例 459
16.5.2按索引排序 460
16.5.3使用并集算法合并容器 463
16.5.4利用容器算法洗牌 466
16.5.5筛选过期的药品 468
16.6小结 470
16.7学习成果检验 470
第17章 程序调试 471
17.1选择正确的调试方法 472
17.2程序错误常见的4种类型 472
17.2.1语法错误 472
17.2.2连接错误 473
17.2.3运行时错误 473
17.2.4逻辑错误 474
17.3调试工具的使用 475
17.3.1创建调试程序 475
17.3.2进入调试状态 476
17.3.3监视窗口 477
17.3.4调用堆栈窗口 477
17.3.5内存窗口 478
17.3.6变量窗口 478
17.3.7寄存器窗口 478
17.3.8反汇编窗口 479
17.4调试的基本应用 479
17.4.1变量的跟踪与查看 479
17.4.2位置断点的使用 480
17.5小结 481
第18章 综合实验(4)——商品销售系统 483
18.1商品类的设计 484
18.2销售系统的设计 485
18.3销售记录功能 497
18.4小结 502
第5篇 项目实战 505
第19章 网络通信 505
19.1 TCP/IP协议 506
19.1.1 OSI参考模型 506
19.1.2 TCP/IP参考模型 506
19.1.3 IP地址 507
19.1.4数据包格式 508
19.2套接字 510
19.2.1 Winsocket套接字 510
19.2.2 Winsocket的使用 510
19.2.3套接字阻塞模式 515
19.2.4字节顺序 515
19.2.5面向连接流 516
19.2.6面向无连接流 516
19.3简单协议通信 517
19.3.1服务端 517
19.3.2客户端 520
19.3.3实例的运行 521
19.4小结 521
第20章 吃豆子游戏 523
20.1 Windows应用程序 524
20.1.1建立Windows应用程序 524
20.1.2 WinMain函数 526
20.1.3 Windows消息循环 529
20.1.4常用绘图GDI 532
20.2制作PacMan 535
20.2.1 PacMan程序框架初步分析 535
20.2.2碰撞检测的实现 538
20.2.3地图类的设计 542
20.2.4数据更新 545
20.2.5绘图 553
20.2.6窗口设计 559
20.3小结 566