第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 常用开发环境 6
1.2.1 Visual C++6.0 6
1.2.2 Visual C++2008 7
1.2.3 GCC/G++ 8
1.2.4 Dev-C 8
1.2.5 Eclipse 9
1.3 认知C++程序代码 9
1.4 C++工程项目文件 10
1.5 使用VC创建程序 11
1.6 编译与连接过程 14
1.7 C++的特点 17
1.8 小结 17
第2章 数据类型 19
2.1 第一个C++程序 20
2.1.1 #INCLUDE指令 20
2.1.2 注释 20
2.1.3 main函数 21
2.1.4 函数体 21
2.1.5 函数返回值 21
2.2 数据类型 21
2.3 常量及符号 22
2.3.1 整型常量 23
2.3.2 实型常量 24
2.3.3 字符常量 24
2.3.4 字符串常量 25
2.3.5 其他常量 26
2.4 变量 26
2.4.1 标识符 26
2.4.2 变量与变量说明 27
2.4.3 整型变量 27
2.4.4 实型变量 28
2.4.5 变量赋值 28
2.4.6 变量赋初值 29
2.4.7 字符变量 29
2.5 数据输入与输出 30
2.5.1 控制台屏幕 31
2.5.2 C++语言中的流 31
2.5.3 流操作的控制 33
2.6 小结 40
2.7 实践与练习 41
第3章 表达式与语句 43
3.1 运算符 44
3.1.1 算术运算符 44
3.1.2 关系运算符 45
3.1.3 逻辑运算符 46
3.1.4 赋值运算符 47
3.1.5 位运算 48
3.1.6 移位运算符 50
3.1.7 sizeof运算符 52
3.1.8 条件运算符 52
3.1.9 逗号运算符 53
3.2 结合性和优先级 53
3.3 表达式 54
3.3.1 算术表达式 55
3.3.2 关系表达式 55
3.3.3 条件表达式 55
3.3.4 赋值表达式 56
3.3.5 逻辑表达式 56
3.3.6 逗号表达式 56
3.3.7 表达式中的类型转换 58
3.4 语句 60
3.5 小结 61
3.6 实践与练习 61
第4章 条件判断语句 63
4.1 决策分支 64
4.2 判断语句 65
4.2.1 第一种形式的判断语句 65
4.2.2 第二种形式的判断语句 67
4.2.3 第三种形式的判断语句 69
4.3 使用条件运算符进行判断 70
4.4 switch语句 72
4.5 判断语句的嵌套 75
4.6 小结 77
4.7 实践与练习 77
第5章 循环语句 79
5.1 while循环 80
5.2 do...while循环 82
5.3 while与do...while比较 83
5.4 for循环语句 85
5.5 循环控制 88
5.5.1 控制循环的变量 89
5.5.2 break语句 90
5.5.3 continue语句 91
5.5.4 goto语句 92
5.6 循环嵌套 93
5.7 循环应用实例 95
5.7.1 阿姆斯壮数 95
5.7.2 巴斯卡三角形 96
5.7.3 对输入的分数进行排名 97
5.8 小结 98
5.9 实践与练习 98
第6章 函数 99
6.1 函数概述 100
6.1.1 函数的定义 100
6.1.2 函数的声明 100
6.2 函数参数及返回值 102
6.2.1 返回值 102
6.2.2 空函数 102
6.2.3 形参与实参 103
6.2.4 默认参数 104
6.2.5 可变参数 105
6.3 函数调用 106
6.3.1 传值调用 106
6.3.2 嵌套调用 108
6.3.3 递归调用 109
6.4 变量作用域 113
6.5 重载函数 113
6.6 内联函数 115
6.7 变量的存储类别 116
6.7.1 auto变量 116
6.7.2 static变量 117
6.7.3 register变量 119
6.7.4 extem变量 119
6.8 小结 120
6.9 实践与练习 120
第7章 数组、指针和引用 121
7.1 一维数组 122
7.1.1 一维数组的声明 122
7.1.2 一维数组的引用 122
7.1.3 一维数组的初始化 123
7.2 二维数组 124
7.2.1 二维数组的声明 124
7.2.2 二维数组元素的引用 125
7.2.3 二维数组的初始化 126
7.3 字符数组 128
7.4 指针 135
7.4.1 变量与指针 135
7.4.2 指针运算符和取地址运算符 138
7.4.3 指针运算 140
7.5 指针与数组 141
7.5.1 数组的存储 141
7.5.2 指针与一维数组 142
7.5.3 指针与二维数组 144
7.5.4 指针与字符数组 148
7.6 指向函数的指针 149
7.7 引用 150
7.7.1 使用引用传递参数 152
7.7.2 指针传递参数 153
7.7.3 数组做函数参数 154
7.8 指针数组 156
7.9 小结 159
7.10 实践与练习 159
第8章 构造数据类型 161
8.1 结构体 162
8.1.1 结构体定义 162
8.1.2 结构体变量 163
8.1.3 结构体成员及初始化 163
8.1.4 结构体的嵌套 166
8.1.5 结构体大小 167
8.2 结构体与函数 169
8.2.1 结构体变量做函数参数 169
8.2.2 结构体指针做函数参数 170
8.3 结构体数组 171
8.3.1 结构体数组声明与引用 171
8.3.2 指针访问结构体数组 172
8.4 共用体 173
8.4.1 共用体的定义与声明 173
8.4.2 共用体的大小 174
8.4.3 共用体的特点 176
8.5 枚举类型 176
8.5.1 枚举类型的声明 176
8.5.2 枚举类型变量 177
8.5.3 枚举类型的运算 178
8.6 自定义数据类型 179
8.7 小结 181
8.8 实践与练习 181
第2篇 核心技术 185
第9章 面向对象编程 185
9.1 面向对象概述 186
9.2 面向对象与面向过程编程 187
9.2.1 面向过程编程 187
9.2.2 面向对象编程 188
9.2.3 面向对象的特点 188
9.3 统一建模语言 189
9.3.1 统一建模语言概述 189
9.3.2 统一建模语言的结构 189
9.3.3 面向对象的建模 191
9.4 小结 192
第10章 类和对象 193
10.1 C++类 194
10.1.1 类概述 194
10.1.2 类的声明与定义 194
10.1.3 类的实现 196
10.1.4 对象的声明 200
10.2 构造函数 202
10.2.1 构造函数概述 202
10.2.2 复制构造函数 204
10.3 析构函数 206
10.4 类成员 208
10.4.1 访问类成员 208
10.4.2 内联成员函数 210
10.4.3 静态类成员 211
10.4.4 隐藏的this指针 213
10.4.5 嵌套类 214
10.4.6 局部类 215
10.5 友元 216
10.5.1 友元概述 216
10.5.2 友元类 218
10.5.3 友元方法 219
10.6 命名空间 222
10.6.1 使用命名空间 222
10.6.2 定义命名空间 222
10.6.3 在多个文件中定义命名空间 225
10.6.4 定义嵌套的命名空间 226
10.6.5 定义未命名的命名空间 228
10.7 小结 228
10.8 实践与练习 229
第11章 继承与派生 231
11.1 继承 232
11.1.1 类的继承 232
11.1.2 继承后可访问性 234
11.1.3 构造函数访问顺序 237
11.1.4 子类隐藏父类的成员函数 238
11.2 重载运算符 241
11.2.1 重载运算符的必要性 241
11.2.2 重载运算符的形式与规则 243
11.2.3 重载运算符的运算 244
11.2.4 转换运算符 247
11.3 多重继承 248
11.3.1 多重继承定义 248
11.3.2 二义性 250
11.3.3 多重继承的构造顺序 250
11.4 多态 252
11.4.1 虚函数概述 252
11.4.2 利用虚函数实现动态绑定 253
11.4.3 虚继承 254
11.5 抽象类 256
11.5.1 纯虚函数 256
11.5.2 实现抽象类中的成员函数 258
11.6 小结 260
11.7 实践与练习 260
第3篇 高级应用 263
第12章 模板 263
12.1 函数模板 264
12.1.1 函数模板的定义 264
12.1.2 函数模板的作用 265
12.1.3 重载函数模板 267
12.2 类模板 268
12.2.1 类模板的定义与声明 268
12.2.2 简单类模板 270
12.2.3 默认模板参数 271
12.2.4 为具体类型的参数提供默认值 272
12.2.5 有界数组模板 273
12.3 模板的使用 275
12.3.1 定制类模板 275
12.3.2 定制类模板成员函数 276
12.3.3 模板部分定制 278
12.4 链表类模板 279
12.4.1 链表 280
12.4.2 链表类模板 282
12.4.3 类模板的静态数据成员 284
12.5 小结 286
12.6 实践与练习 286
第13章 STL标准模板库 287
13.1 序列容器 288
13.1.1 向量类模板 288
13.1.2 双端队列类模板 290
13.1.3 链表类模板 292
13.2 结合容器 294
13.2.1 set类模板 295
13.2.2 multiset类模板 299
13.2.3 map类模板 304
13.2.4 multimap类模板 306
13.3 算法 307
13.3.1 非修正序列算法 307
13.3.2 修正序列算法 310
13.3.3 排序算法 314
13.3.4 数值算法 321
13.4 迭代器 325
13.4.1 输出迭代器 325
13.4.2 输入迭代器 326
13.4.3 前向迭代器 327
13.4.4 双向迭代器 328
13.4.5 随机访问迭代器 329
13.5 小结 330
13.6 实践与练习 330
第14章 RTTI与异常处理 331
14.1 RTTI(运行时类型识别) 332
14.1.1 什么是RTTI 332
14.1.2 RTTI与引用 333
14.1.3 RTTI与多重继承 334
14.1.4 RTTI映射语法 335
14.2 异常处理 337
14.2.1 抛出异常 338
14.2.2 异常捕获 340
14.2.3 异常匹配 342
14.2.4 标准异常 344
14.3 小结 345
第15章 程序调试 347
15.1 选择正确的调试方法 348
15.2 程序错误常见的4种类型 348
15.2.1 语法错误 348
15.2.2 连接错误 349
15.2.3 运行时错误 349
15.2.4 逻辑错误 350
15.3 调试工具的使用 351
15.3.1 创建调试程序 351
15.3.2 进入调试状态 353
15.3.3 Warch窗口 353
15.3.4 Call Stack窗口 353
15.3.5 Memory窗口 354
15.3.6 Vaiables窗口 354
15.3.7 Registers窗口 355
15.3.8 Disassembly窗口 355
15.4 调试的基本应用 355
15.4.1 变量的跟踪与查看 355
15.4.2 位置断点的使用 357
15.4.3 数据断点的使用 359
15.5 调试的高级应用 360
15.5.1 在调试时修改变量的值 360
15.5.2 在循环中调试 361
15.6 小结 362
第16章 文件操作 363
16.1 文件流 364
16.1.1 C++中的流类库 364
16.1.2 类库的使用 364
16.1.3 ios类中的枚举常量 365
16.1.4 流的输入/输出 365
16.2 文件打开 366
16.2.1 打开方式 366
16.2.2 默认打开模式 367
16.2.3 打开文件同时创建文件 368
16.3 文件的读写 369
16.3.1 文件流 369
16.3.2 写文本文件 371
16.3.3 读取文本文件 371
16.3.4 二进制文件的读写 372
16.3.5 实现文件复制 374
16.4 文件指针移动操作 375
16.4.1 文件错误与状态 375
16.4.2 文件的追加 375
16.4.3 文件结尾的判断 376
16.4.4 在指定位置读写文件 378
16.5 文件和流的关联和分离 379
16.6 删除文件 381
16.7 小结 382
16.8 实践与练习 382
第17章 网络通信 383
17.1 TCP/IP协议 384
17.1.1 OSI参考模型 384
17.1.2 TCP/IP参考模型 384
17.1.3 IP地址 385
17.1.4 数据包格式 386
17.2 套接字 388
17.2.1 Winsocket套接字 388
1 7.2.2 Winsocket的使用 388
17.2.3 套接字阻塞模式 393
17.2.4 字节顺序 393
17.2.5 面向连接流 394
17.2.6 面向无连接流 395
17.3 简单协议通信 395
17.3.1 服务端 395
17.3.2 客户端 398
17.3.3 实例的运行 399
17.4 小结 399
17.5 实践与练习 399
第4篇 项目实战 403
第18章 图书管理系统 403
18.1 系统设计 404
18.1.1 需求分析 404
18.1.2 系统目标 404
18.1.3 系统功能结构 404
18.2 图书类 405
18.3 主程序 409
18.4 添加图书 413
18.5 显示图书信息 414
18.6 删除图书 416
18.7 小结 417