第1章 绪论 1
1.1 机器语言、汇编语言和高级语言 1
1.2 C语言的历史与特点 2
1.3 从C语言到C++语言的进化 3
1.4 计算机结构的五个主要单元 3
1.5 C/C++程序的实现 4
1.6 C/C++源程序的基本形式 5
1.7 函数初步 8
1.8 C/C++程序上机步骤简介 11
1.9 小结 12
第2章 基本元素、类型和概念 14
2.1 基本语言元素 14
2.1.1 C/C++中的字符集 14
2.1.2 语言符号 14
2.2 基本数据类型 16
2.3 算术负运算与补码转换 18
2.4 常数和数据的内存布局 21
2.5 sizeof运算符 26
2.6 变量 27
2 7 格式化输出函数printf和输入函数scanf 29
2.7.1 输出函数printf 29
2.7.2 输入格式转换函数scanf 33
2.8 const量或不变量 35
2.9 变量的引用(C++特有) 36
2.10 typedef类型声明语句 37
第3章 运算符与表达式 39
3.1 运算符与表达式概述 39
3.2 左值和右值 40
3.3 运算符的优先级与结合性 40
3.4 算术运算表达式 41
3.5 混合运算时数据的类型转换 42
3.5.1 强制类型转换 42
3.5.2 常用的算术转换 43
3.5.3 隐含类型转换 44
3.6 赋值表达式和混合赋值 45
3.7 算术复合赋值表达式 47
3.8 自增与自减运算符表达式 49
3.9 号运算符表达式 50
3.10 表达式的副作用 51
3.11 位操作运算符(多学时) 52
第4章 逻辑运算和选择控制语句 56
4.1 语句概述 56
4.2 C++中特有的输入输出流 58
4.3 逻辑判断 60
4.3.1 关系运算符 60
4.3.2 逻辑运算符 61
4.4 选择语句 63
4.4.1 单路分支if语句 63
4.4.2 路分支if-else语句 65
4.4.3 if-else语句或if语句的嵌套 66
4.4.4 if-else if-else语句 67
4.4.5 条件运算符 69
4.5 switch语句 70
第5章 循环控制 73
5.1 while语句 73
5.2 do-while语句 74
5.3 for语句 76
5.4 break语句与continue语句 78
5.5 goto语句 80
5.6 多重循环 81
第6章 指针与数组 83
6.1 指针的概念 83
6.2 一级指针和指针的操作 84
6.3 指针与间接变量 85
6.4 一维数组 86
6.4.1 一维数组的定义 87
6.4.2 一维数组的初始化 87
6.4.3 一维数组的内存映像和指针加减关系运算 88
6.4.4 函数的数组形参和指针形参 91
6.5 const指针 93
6.6 二维数组 95
6.6.1 二维数组的定义 95
6.6.2 二维数组的初始化 97
6.6.3 多维数组 97
6.7 指向数组的指针 98
6.8 级指针 101
6.9 指针数组 102
6.10 void关键字与void*型的指针 105
6.11 程序动态存储结构 107
6.11.1 C++中new运算符和delete运算符 107
6.11.2 C语言中的动态内存分配函数malloc和free函数 108
6.12 指针的类型转换和匹配关系(知识拓展) 111
6.13 下标表达式与访问指针寻址计算(知识拓展) 113
第7章 程序的结构 116
7.1 程序设计方法 116
7.1.1 自顶向下的程序设计 116
7.1.2 自底向上的程序设计 118
7.1.3 结构化程序设计 118
7.1.4 多文件结构 119
7.2 作用域或范围scope 119
7.3 可见性与名称隐藏 122
7.4 生存期与存储属性 123
7.5 extern关键字与外部连接属性 124
7.6 static关键字与内部连接属性 125
7.6.1 静态函数或内部函数 125
7.6.2 静态全局变量和静态局部变量 126
7.7 返回指针值的函数与生存期 127
7.8 枚举 130
第8章 函数 134
8.1 函数与调用约定 134
8.2 数的总体概念 135
8.2.1 函数的返回类型 136
8.2.2 函数的定义 136
8.2.3 函数原型 137
8.2.4 return语句 138
8.2.5 函数的使用 139
8.3 内联函数(inline function) 140
8.4 引用和数值传递方式具体比较 141
8.5 函数重载——function overloading(C++特有) 143
8.5.1 重载函数与名称细分 143
8.5.2 函数虚实结合类型匹配(知识拓展) 145
8.5.3 连接C语言中的程序模块(查阅) 146
8.6 默认参数——default argument values(C++特有) 147
8.7 函数的调用机制(多学时) 148
8.8 函数的嵌套与递归 150
8.9 数组的排序和查找(根据学时酌情选讲) 152
8.9.1 直接插入排序 152
8.9.2 选择排序 153
8.9.3 交换法实现冒泡排序 154
8.9.4 二分查找 155
第9章 函数指针 157
9.1 函数指针的定义 157
9.2 函数指针的使用 158
9.3 函数指针作为形参 159
9.4 typedef关键字、函数指针与重载函数(多学时) 163
9.5 函数指针构成的数组(多学时) 164
第10章 预处理过程 168
10.1 编译预处理指令概述 168
10.2 预处理指令#include 169
10.3 #define指令 169
10.3.1 #undef取消标识符定义 169
10.3.2 不带参的宏替换 169
10.3.3 带参的宏定义 172
10.4 宏调用和内联函数(知识拓展) 173
10.5 条件编译指令(多学时) 174
10.6 字符串预处理操作符(多学时) 177
第11章 字符和内存处理 180
11.1 字符数组、指针和字符串的初始化作用 180
11.2 strlen函数确定字符串有效长度 185
11.3 strcpy函数拷贝字符串 186
11.4 strcat函数合并字符串 187
11.5 strcmp函数比较字符串 187
11.6 字符串排序算例 188
11.7 memcpy函数拷贝内存 189
11.8 程序的入口函数main 190
第12章 结构与联合 193
12.1 结构的声明和结构变量 193
12.2 结构变量的定义形式 194
12.3 对结构数据的操作 195
12.4 结构变量的内存分布 197
12.5 结构的初始化 198
12.6 结构与函数 200
12.7 结构的组合 202
12.8 单链表(多学时) 204
12.8.1 单链表概述 204
12.8.2 链表结构的建立 204
12.8.3 动态建立堆中链表 207
12.8.4 对链表的插入 208
12.8.5 链表结点的脱离 211
12.9 联合union 213
12.9.1 联合的特性和定义 213
12.9.2 联合的内存映像 215
12.9.3 无名联合(知识拓展) 217
12.10 数据的引用类型转换(知识拓展) 219
12.11 位域或位字段(查阅) 221
第13章 文件 223
13.1 文本流和二进制流 223
13.2 流文件 224
13.3 文件的打开函数fopen和关闭函数fclose 225
13.4 格式读写fprintf和fscanf函数 227
13.5 出错的测试或清除函数(feof, ferror,clearerr) 229
13.6 字符和字符串读写函数 229
13.6.1 读取单个字符的fgetc函数 229
13.6.2 存写单个字符的fputc函数 230
13.6.3 按行读文本串fgets函数 230
13.6.4 按行写文本串fputs函数 231
13.7 无格式转换的读写函数fread和fwrite 231
13.8 文件的定位 233
13.8.1 ftell函数告知当前位置 234
13.8.2 fseek函数探寻文件的位置 234
13.8.3 rewind函数反绕到文件开头位置 234
13.9 一个简单的读写存盘程序 235
第14章 迈入面向对象编程部分 239
14.1 面向对象理论鸟瞰 239
14.2 面向对象程序设计的概念 240
14.3 面向过程和面向对象编程 241
14.4 类的声明 243
14.5 对象的定义 244
14.6 成员函数与this关键字 245
14.7 类作用域和成员的访问 246
14.8 内联成员函数 249
14.9 前置说明(forword reference) 249
14.10 函数的接口转换(知识拓展) 250
第15章 特殊的成员函数 253
15.1 构造函数(constructor) 253
15.1.1 构造函数的特殊性 253
15.1.2 拷贝构造函数和无参构造函数 254
15.1.3 缺省构造函数 255
15.2 构造函数的调用 255
15.2.1 对象名调用 256
15.2.2 new运算符调用 257
15.2.3 无名对象调用 257
15.2.4 函数对象名语法算例 257
15.3 对象数组的初始化 258
15.4 析构函数(destructor) 259
15.5 赋值运算符函数operator= 261
15.6 成员函数重载 262
15.7 缺省参量的成员函数 263
15.8 编译器默默提供的成员函数(知识拓展) 264
第16章 数据的共享和流通 266
16.1 浅拷贝和深拷贝(shallow copy和deep copy) 266
16.2 只读成员函数与volatile、mutable关键字 268
16.3 友元(friend) 270
16.3.1 友元函数 271
16.3.2 友元类 272
16.4 静态成员 273
16.4.1 静态数据成员 273
16.4.2 静态成员函数 274
16.5 指向成员的指针(多学时) 276
16.5.1 指向数据成员的指针 276
16.5.2 指向成员函数的指针 277
第17章 运算符重载 280
17.1 运算符重载的概念 280
17.2 禁止重载的运算符 281
17.3 运算符重载的规则 282
17.4 单目运算符函数 282
17.5 目运算符函数 284
17.6 数据的类型转换 285
17.6.1 单参数构造函数的类型转换 286
17.6.2 explicit关键字抑制自动类型转换 286
17.6.3 运算符类型转换函数 287
17.7 自增运算符和自减运算符 288
17.8 函数调用运算符()函数(多学时) 290
17.9 访问成员运算符->(多学时) 291
17.10 数组下标运算符[](多学时) 292
17.11 枚举类变量的运算性质(查阅) 294
第18章 组合和继承 296
18.1 组合 296
18.1.1 组合的概念 296
18.1.2 引用型成员和const成员 296
18.1.3 嵌入对象的初始化 297
18.1.4 冒号初始化语法 298
18.2 继承和派生 299
18.2.1 继承的概念 299
18.2.2 间接基类和间接派生类 300
18.3 派生类的声明和对象定义 300
18.4 派生类的三种继承方式 301
18.5 继承和不继承的语义 302
18.6 派生与继承的算例 303
18.7 构造和析构的次序 304
第19章 多态和虚函数 307
19.1 函数覆盖和函数重载 307
19.2 虚函数的声明 308
19.3 多态类层次之间的适应关系 308
19.3.1 对象赋值兼容规则 308
19.3.2 静态类型和动态类型 309
19.4 静态联编和动态绑定 309
19.5 名称索引的优先级 311
19.6 虚函数动态绑定调用算例 312
19.7 虚拟析构函数 314
19.8 纯虚函数和抽象类 315
第20章 模板 318
20.1 模板的概念和方法 318
20.2 函数模板 319
20.2.1 函数模板的机制 319
20.2.2 函数模板的声明 319
20.2.3 函数模板的实现 319
20.3 函数模板和函数重载算例 320
20.4 非模板的重载函数 321
20.5 类模板 322
20.5.1 类模板的声明 322
20.5.2 类模板成员函数的描述 322
20.5.3 类模板的具体实现 323
20.5.4 类模板的成员函数显式实现 324
20.6 类模板的默认参数 324
第21章 异常处理技术 326
21.1 异常处理的概况 326
21.2 C++异常处理的途径 327
21.3 异常的多路捕获 330
21.4 异常的重新抛出 331
21.5 对象的清理 332
21.6 类层次的异常处理策略 334
21.7 关于抛出异常的函数显式说明(查阅) 337
第22章 多重继承和类型变换 338
22.1 多个直接基类 338
22.2 虚拟基类 340
22.3 多继承的构造函数 341
22.4 名称的二义性 344
22.5 新的类型变换(查阅) 345
22.5.1 dynamic_cast动态类型变换 346
22.5.2 static_cast静态类型变换 348
22.5.3 reinterpret_cast重新翻译变换 350
22.5.4 const_cast松动const属性变换 350
22.5.5 typeid关键字 351
第23章 C++的输入输出类库 355
23.1 iotream类层次概述 355
23.2 关于C++的新类 356
23.3 流对象的输入输出重载函数 356
23.4 重载流插入运算符和流提取运算符 358
23.5 格式化的输入输出 359
23.5.1 操作算子(manipulator)的概念 359
23.5.2 整数转换的操作算子hex,oct,dec 359
23.5.3 自定义操作算子 360
23.5.4 格式化标志值 360
23.5.5 控制浮点精度 361
23.5.6 浮点数和科学计数法 362
23.5.7 字符填充和宽度、对齐控制 363
23.6 流对象磁盘文件的输入输出 364
23.6.1 文件的打开函数 364
23.6.2 文件的关闭函数close 365
23.6.3 测试状态的函数(bad,eof,good,clear等) 366
23.6.4 字符和字符串读写函数 367
23.7 无格式转换的读写函数read和write 368
23.7.1 read读取函数 368
23.7.2 write存写函数 369
23.8 文件的定位 370
第24章 名称空间和嵌套类(查阅) 372
24.1 名称空间(namespace) 372
24.1.1 固有的名称空间 372
24.1.2 namespace构建名称空间 373
24.1.3 using声明语句 374
24.1.4 名称空间的分散布置 375
24.1.5 名称空间的歧义性 376
24.1.6 嵌套的名称空间 377
24.1.7 名称空间的别名 377
24.1.8 无名的名称空间 378
24.2 嵌套类 379
24.3 友元函数和嵌套类 381
附录 ASCII码表 383