第1篇 面向过程的C+编程 2
第1章 走进C++ 2
1.1认识C++ 2
1.1.1 C++的发展历程 2
1.1.2 C++的应用领域 2
1.2 C++开发环境的搭建 3
1.2.1安装过程 3
1.2.2开发环境介绍 4
1.3认识第一个程序 7
1.4小结 11
第2章 数据类型 12
2.1数据的表示——数字运算型 12
2.1.1表示整数的类型——整型 12
2.1.2表示小数的类型——实型 13
2.1.3浮点型 14
2.1.4双精度型 15
2.2是非问题——逻辑运算型 15
2.2.1“并且”的运算——与运算 15
2.2.2“或者”的运算——或运算 16
2.2.3“No”的运算——非运算 16
2.2.4逻辑运算的组合 17
2.3文本的基础——字符型和字符串 17
2.3.1单个字符的表示——字符型 17
2.3.2多个字符的表示——字符串 19
2.3.3字符与字符串的差异 19
2.4复杂数据的表示——复合类型 19
2.5小结 20
2.6习题 20
第3章 数据的指代——变量和常量 21
3.1指代可变的量——变量 21
3.1.1变量是什么 21
3.1.2多种多样的变量 23
3.1.3变量的初始化 25
3.1.4如何对变量命名 26
3.2指代不变的量——常量 26
3.2.1常量是什么 26
3.2.2多种多样的常量 27
3.2.3使用常量需要注意的问题 29
3.2.4常量的初始化 29
3.2.5如何对常量命名 29
3.3小结 30
3.4习题 30
第4章 数据运算的核心——运算符 31
4.1加减乘除的运算——算术运算符 31
4.2是是非非的运算——逻辑运算符 34
4.3比较大小的运算——关系运算符 34
4.4位运算 37
4.5最基础的运算——赋值 40
4.6运算符的优先级和结合性 41
4.6.1优先级 41
4.6.2结合性 44
4.7小结 44
4.8习题 44
第5章 运算的最小单位——表达式 46
5.1使用表达式 46
5.1.1表达式的种类 46
5.1.2表达式到底是什么 47
5.1.3如何写表达式 47
5.2数据类型的转换 48
5.2.1隐式转换 48
5.2.2显式转换 50
5.3小结 53
5.4习题 53
第6章 程序的最小单位——语句 55
6.1认识语句 55
6.1.1单一语句——简单语句 55
6.1.2多个语句——语句块 56
6.2程序的执行顺序 58
6.3因地制宜——选择型语句 58
6.3.1如果…就…——if语句 58
6.3.2多选一——switch语句 61
6.4周而复始——循环型语句 65
6.4.1只要…就…——while语句 65
6.4.2如果…继续…—— do… while语句 66
6.4.3 for语句 67
6.5各种标志——标签语句 69
6.5.1程序中的标志——普通标签语句 69
6.5.2特殊标签语句 71
6.6快捷通道——跳转语句 71
6.6.1跳出来——break语句 71
6.6.2 continue语句 72
6.6.3 goto语句 73
6.7语句嵌套 74
6.7.1自增 74
6.7.2自减 74
6.7.3逗号语句 75
6.7.4选择的简化版——?…:语句 75
6.8小结 76
6.9习题 76
第7章 指针 78
7.1什么是地址 78
7.2如何定义指针 79
7.2.1指针的定义 79
7.2.2向左向右分析指针 80
7.2.3 sizeof 80
7.3指针的类型 81
7.4初始化指针 83
7.4.1用指针的地址进行初始化 84
7.4.2用变量的地址进行初始化 84
7.4.3用new分配的内存单元进行初始化 85
7.4.4用malloc分配的内存单元进行初始化 85
7.5指针的运算 87
7.5.1算术运算 87
7.5.2关系运算 89
7.6指针嵌套——指针的指针 90
7.7使用指针 92
7.7.1给指针赋值 92
7.7.2操作符 93
7.8指针与引用 93
7.9特殊指针 96
7.9.1 void型指针 96
7.9.2空指针 97
7.10小结 98
7.11习题 98
第8章 多数据的处理——复合类型 100
8.1静态数组 100
8.1.1指定维数完整 100
8.1.2维数不全 101
8.1.3无维数 101
8.2动态数组 101
8.2.1基于堆的动态数组 101
8.2.2基于栈的动态数组 103
8.3数据元素的存放 104
8.3.1列优先存放 104
8.3.2行优先存放 105
8.4字符数组 105
8.4.1定义和使用 106
8.4.2字符数组和字符串 106
8.4.3字符数组和字符串指针 107
8.5初始化 107
8.5.1定义时初始化 107
8.5.2赋值初始化数组 109
8.6指针与数组 110
8.6.1指向数组的指针 110
8.6.2指针数组 111
8.7数组的使用 112
8.7.1索引方式 112
8.7.2指针方式 113
8.8枚举 114
8.9结构体 116
8.10共用体 118
8.11自定义类型 120
8.11.1 typedef的作用 120
8.11.2定义自己的类型 122
8.12小结 124
8.13习题 124
第9章 通用语句块——函数 125
9.1定义函数 125
9.1.1定义方式 125
9.1.2函数定义的示例 127
9.2不同的函数 130
9.2.1从返回值类型来划分 130
9.2.2从作用域来划分 130
9.2.3从C++++类的成员函数特性来划分 132
9.3函数通用的关键——参数 133
9.3.1定义时候的参数——形参 133
9.3.2调用时候的参数——实参 134
9.4有借有还——函数返回值 135
9.4.1返回值 136
9.4.2返回表达式 136
9.5调用函数 136
9.5.1单独调用 136
9.5.2函数表达式调用 137
9.5.3嵌套调用 137
9.5.4参数传递方式 138
9.6自己调用自己——递归函数 139
9.7函数指针 140
9.8函数作为参数 141
9.9 main()函数分析 142
9.10函数的规范编写 144
9.11小结 144
9.12习题 144
第10章C++中的输入/输出 146
10.1输入/输出库iostream 146
10.1.1操作标准I/O 146
10.1.2读写文件I/O 147
10.1.3操作字符串I/O 148
10.2输出流 149
10.2.1输出预定义类型数据 149
10.2.2输出自定义数据类型 150
10.3输入流 151
10.3.1输入预定义类型数据 151
10.3.2输入自定义类型数据 152
10.4格式化输入/输出 153
10.4.1使用ios类成员函数进行格式化 153
10.4.2使用操纵函数进行格式化控制 155
10.5使用文件 157
10.5.1打开/关闭文件 157
10.5.2顺序读写文件 159
10.5.3随机读写文件 160
10.6小结 162
10.7习题 162
第11章 面向过程的程序设计实战 164
11.1问题定义 164
11.2需求分析 164
11.3总体设计 165
11.3.1数据结构 165
11.3.2图书基础数据维护模块 166
11.3.3图书借阅模块 168
11.3.4图书返还模块 168
11.3.5会员基础数据维护模块 169
11.3.6总体流程图 171
11.4编码 172
11.4.1主控文件bookmanager.cpp 172
11.4.2菜单处理头文件mainfunction.h 172
11.4.3数据结构头文件datainfo.h 173
11.4.4功能函数头文件subfunction.h 173
11.4.5菜单处理实现文件mainfunction.cpp 174
11.4.6功能函数实现文件subfunction.cpp 177
11.5小结 187
第2篇 面向对象的C+编程 190
第12章 面向对象 190
12.1面向对象的概念 190
12.2面向对象的程序设计 192
12.3对象和类 192
12.4面向对象的特征 193
12.4.1封装 193
12.4.2继承 194
12.4.3多态 194
12.5小结 195
12.6习题 195
第13章 面向对象的本质——封装 196
13.1构建类 196
13.1.1声明类 196
13.1.2构建属性 198
13.1.3构建类的方法 198
13.1.4使用构造函数 199
13.1.5使用析构函数 202
13.1.6可以共享的成员——静态成员 203
13.1.7构建友元 204
13.1.8访问修饰符 206
13.1.9指向类成员的指针 207
13.1.10类中定义的类——嵌套类 208
13.1.11类文件的组织 209
13.2类的具体表现——对象 211
13.2.1定义对象 211
13.2.2使用对象 212
13.2.3指向自身的指针——this指针 214
13.3小结 214
13.4习题 214
第14章 命名空间和作用域 216
14.1为什么使用命名空间 216
14.2定义命名空间 216
14.3如何使用命名空间 218
14.4作用域 220
14.4.1什么叫作用域 220
14.4.2作用域的分类 221
14.5小结 223
14.6习题 223
第15章 继承和派生 225
15.1继承和派生的关系 225
15.2派生一个类 225
15.2.1派生的起点——基类 226
15.2.2派生的方式 227
15.2.3使用构造函数 229
15.2.4使用析构函数 231
15.2.5同名方法的使用 232
15.2.6同名属性的使用 234
15.3单重继承 235
15.4多重继承 235
15.4.1为什么要多重继承 235
15.4.2构造多重继承 236
15.4.3析构函数和构造函数 237
15.4.4多重继承的二义性 239
15.5虚继承与虚基类 241
15.5.1什么是虚基承 241
15.5.2初始化虚基类 244
15.5.3集成虚基类 246
15.6继承中的限制 246
15.7小结 247
15.8习题 247
第16章 灵活的代码——多态 250
16.1什么是多态 250
16.2宏多态 251
16.3虚函数 252
16.3.1虚函数的作用 252
16.3.2静态绑定 254
16.3.3动态绑定 254
16.3.4纯虚函数 254
16.4抽象类 256
16.4.1什么是抽象类 256
16.4.2抽象类的派生 256
16.5运算符的多态——运算符重载 257
16.5.1为什么要重载运算符 257
16.5.2重载的限制 258
16.5.3重载一元运算符 259
16.5.4重载二元运算符 260
16.6函数重载 261
16.6.1参数类型不同 261
16.6.2参数个数不同 262
16.7流的重载 263
16.7.1流插入的重载 263
16.7.2流提取的重载 264
16.8覆盖 266
16.8.1覆盖函数 266
16.8.2覆盖变量 267
16.9小结 268
16.10习题 268
第17章 模板 271
17.1什么是模板 271
17.2类模板 272
17.2.1定义类模板 272
17.2.2使用类模板 273
17.2.3类模板和模板类的区别 275
17.3函数模板 276
17.3.1定义函数模板 276
17.3.2使用函数模板 276
17.3.3函数模板和模板函数的区别 278
17.4模板的实例化 278
17.5模板的作用 279
17.6基于模板的元编程 279
17.6.1什么是元编程 279
17.6.2基于模板的元编程 280
17.7小结 281
17.8习题 281
第18章 面向对象实战 283
18.1问题定义 283
18.2需求分析 283
18.3面向对象分析与设计 284
18.3.1类结构的设计 284
18.3.2类的可见性 284
18.3.3类的结构图 285
18.4编码和测试 286
18.4.1预编译头文件Stdafx.h 286
18.4.2 CCNTime类的头文件Cntime.h 287
18.4.3 CCNTime类的实现文件Cntime.cpp 288
18.4.4主文件main.cpp 295
18.5小结 296
第3篇C+高级开发技术 298
第19章 文本处理——string类 298
19.1定义字符串 298
19.2 string类的常用方法 300
19.3 string类的运算 302
19.3.1查找字符串 302
19.3.2替换字符串 304
19.3.3取子字符串 305
19.3.4比较字符串 305
19.3.5连接字符串 306
19.3.6插入字符串 306
19.3.7获取字符串大小和容量 307
19.4小结 307
19.5习题 308
第20章 不让程序出错——异常处理 309
20.1异常处理机制 309
20.2抛出异常 309
20.3捕获异常 311
20.4什么是异常处理的规格 313
20.5常见的标准异常 313
20.6小结 314
20.7习题 314
第21章 内存管理 316
21.1内存的分类 316
21.2管理栈内存 317
21.2.1申请栈内存 317
21.2.2使用栈内存 318
21.2.3释放栈内存 320
21.2.4获取栈内存 320
21.3管理堆内存 321
21.3.1申请堆内存 321
21.3.2使用堆内存 321
21.3.3释放堆内存 322
21.3.4改变大小 323
21.4小结 324
21.5习题 324
第22章 预处理 325
22.1什么是预处理 325
22.2常见的预处理 325
22.2.1文件包含#include 326
22.2.2布局控制#pragma 326
22.2.3宏替换#define 330
22.2.4条件编译 331
22.3其他预处理指令 332
22.4小结 333
22.5习题 333
第23章 错误与调试 335
23.1什么是错误 335
23.2错误的种类 335
23.2.1语法错误 335
23.2.2链接错误 336
23.2.3运行时错误 338
23.3排查错误 339
23.3.1看懂错误信息 339
23.3.2错误发现的常见方法 339
23.3.3如何调试 340
23.4常见bug的分类 340
23.5调试的窍门 341
23.5.1使用断言assert 341
23.5.2使用断言verify 342
23.5.3 assert和verify的差异 342
23.5.4轨迹跟踪 343
23.5.5使用断点 344
23.6使用交互式调试 345
23.6.1设置和删除断点 345
23.6.2使用Debug窗口 345
23.6.3使用Watch面板 347
23.6.4使用步进方式调试 347
23.7小结 347
23.8习题 348
第4篇 应用开发实战 350
第24章 数据结构应用实战 350
24.1采用链表模拟堆栈 350
24.1.1链栈类的定义文件LinkStack.h 350
24.1.2链栈类的实现文件LinkStack.cpp 351
24.1.3链栈类的使用文件test24-1.cpp 354
24.2遍历图 355
24.2.1存储/遍历图 355
24.2.2图遍历的代码 356
24.3小结 359
第25章 网络应用案例 360
25.1客户机/服务器通信 360
25.1.1 WinSocket2常用函数 360
25.1.2服务器/客户机编程模式 363
25.1.3服务器和客户端公用文件 364
25.1.4服务器端实现 367
25.1.5客户端实现 368
25.2自定义协议 369
25.2.1自定义协议 370
25.2.2自定义协议的实现 371
25.3小结 374