第一部分 C++语言基础——C语言 1
第一章 C语言回顾 1
1.1 C语言的起源 1
1.2 C语言是中级语言 2
1.3 C语言是结构化语言 3
1.4 C语言是程序员的语言 4
1.5 C语言的程序结构 5
1.6 库和链接 5
1.7 分离编译 7
1.8 用C++编译程序编译C语言程序 7
第二章 表达式 8
2.1 五种基本数据类型 8
2.2 修饰基本类型 8
2.3 标识符命名 9
2.4 变量 10
2.4.1 变量在哪里说明 10
2.4.2 局部变量 10
2.4.3 形式参数 12
2.4.4 全局变量 13
2.5 存取修饰符 14
2.5.1 const 14
2.5.2 volatile 15
2.6 存储分类符 15
2.6.1 外部的 16
2.6.2 静态变量 16
2.6.2.1 静态局部变量 17
2.6.2.2 静态全局变量 17
2.6.3 寄存器变量 18
2.7 变量初始化 19
2.8 常量 20
2.8.1 十六进制和八进制常量 20
2.8.2 串常量 20
2.8.3 反斜线字符常量 21
2.9 运算符 21
2.9.1 赋值运算符 21
2.9.2 赋值中的类型转换 22
2.9.3 多重赋值 23
2.9.4 算术运算符 23
2.9.5 增量和减量运算符 24
2.9.6 关系和逻辑运算符 24
2.9.7 位操作符 26
2.9.9 指针操作符&和* 29
2.9.8 ?操作符 29
2.9.10 编译时操作符sizeof 31
2.9.11 逗号操作符 31
2.9.12 点(.)和箭头(—>)操作符 32
2.9.13 方括号[]和括号()操作符 32
2.9.14 关于优先级的小结 32
2.10 表达式 33
2.10.1 求值顺序 33
2.10.2 表达式中的类型转换 33
2.10.3 构成符 34
2.10.4 空格与括号 35
2.10.5 C语言中的简写形式 35
3.2.1 if语句 36
3.2 选择语句 36
第三章 C语言的语句 36
3.1 C语言的真值和假值 36
3.2.2 嵌套的if语句 38
3.2.3 阶梯型if-else-if语句 38
3.2.4 操作符?的替代 40
2.2.5 条件表达式 42
3.2.6 switch开关语句 42
3.2.7 嵌套的switch语句 45
3.3 迭代语句 45
3.3.1 for循环 45
3.3.2 for循环的变化形式 46
3.3.3 无限循环 49
3.3.5 while循环 50
3.3.4 没有循环体的for循环 50
3.3.6 do-while循环 52
3.4 转移语句 53
3.4.1 return语句 53
3.4.2 goto语句 53
3.4.3 break语句 54
3.4.4 exit()函数 55
3.4.5 continue 语句 56
3.5 表达式语句 57
3.6 块语句 57
第四章 数组和字符串 58
4.1 一维数组 58
4.2 产生指向数组的指针 59
4.3 向函数传递一维数组 59
4.4 字符串 60
4.5 二维数组 62
4.5.1 字符串数组 65
4.6 多维数组 66
4.7 带下标的指针 66
4.8 数组初始化 68
4.8.1 变长数组的初始化 69
4.9 棋盘游戏实例 69
第五章 指针 73
5.1 指针是什么 73
5.2 指针变量 73
5.3 指针运算符 74
5.4.2 指针运算 75
5.4.1 指针赋值 75
5.4 指针表达式 75
5.4.3 指针比较 76
5.5 指针和数组 77
5.5.1 指针数组 78
5.6 多级间址 79
5.7 指针的初始化 80
5.8 指针函数的指针 81
5.9 C语言的动态分配函数 83
5.10 指针应用中的某些问题 84
第六章 函数 87
6.1 函数的一般形式 87
6.2 函数作用域的规则 87
6.3.1 传值调用与引用调用 88
6.3 函数变元 88
6.3.2 引用调用的建立 89
6.3.3 用数组调用函数 90
6.4 传给main()的变元argc与argv 91
6.5 返回语句 93
6.5.1 从函数返回 94
6.5.2 返回值 95
6.6 返回非整型值的函数 96
6.7 函数原型 97
6.8 返回指针 98
6.9 void类型的函数 99
6.10 main()返回什么 100
6.11 递归 100
6.13 传统的与现代的函数说明 101
6.12 说明变长参数表 101
6.14 实现问题 102
6.14.1 参数和通用函数 102
6.14.2 效率 102
第七章 结构、联合、枚举和用户定义的类型 104
7.1 结构 104
7.1.1 引用结构元素 105
7.1.2 结构赋值 106
7.2 结构数组 106
7.3 向函数传递结构 107
7.3.1 向函数传递结构元素 107
7.3.2 向函数传递完整结构 107
7.4 结构指针 108
7.4.2 结构指针的应用 109
7.4.1 定义结构指针 109
7.6 位域 111
7.5 结构中的数组和结构 111
7.7 联合 113
7.8 枚举 115
7.9 用sizeof增强移植性 117
7.10 类型定义typedef 118
第八章 控制台I/O 119
8.1 一个重要的应用说明 119
8.2 读写字符 119
8.2.1 getchar()的有关问题 120
8.2.2 getchar()的替代 120
8.3 读写字符串 121
8.5 printf() 123
8.4 格式化的控制台I/O 123
8.5.1 打印字符 124
8.5.2 打印数字 124
8.5.3 显示一个地址 125
8.5.4 %n描述符 125
8.5.5 格式化代码修饰符 126
8.5.6 最小域宽描述符 126
8.5.7 精度描述符 127
8.5.8 调整输出 128
8.5.9 处理其它数据类型 128
8.5.10 *和#修饰符 128
8.6.1 格式说明符 129
8.6.2 输入数字 129
8.6 scanf() 129
8.6.3 输入无符号整数 130
8.6.4 用scanf()读单个字符 130
8.6.5 读字符串 130
8.6.6 读入地址 131
8.6.7 %n描述符 131
8.6.8 使用一个扫描集 131
8.6.9 丢弃不期望的空白符 132
8.6.10 控制串中的非空白符 132
8.6.11 必须向scanf()传递地址 132
8.6.12 格式化修饰符 132
8.6.13 压缩输入 133
9.2 C语言与C++语言的I/O 134
9.3 流和文件 134
9.1 ANSI C I/O与Unix I/O 134
第九章 ANSI C的标准文件I/O 134
9.3.1 流 135
9.3.1.1 文本流 135
9.3.1.2 二进制流 135
9.3.2 文件 135
9.4 文件系统基础 136
9.4.1 文件指针 136
9.4.2 打开一个文件 137
9.4.3 关闭一个文件 138
9.4.4 写一个字符 138
9.4.5 读一个字符 138
9.4.6 使用fopen()、gerc()、putc()和fclose() 139
9.4.7 使用feof() 140
9.4.8 使用fputs()和fgets()操作字符串 141
9.4.9 rewind() 142
9.4.10 ferror() 143
9.4.11 删除文件 144
9.4.12 清除一个流 145
9.5 fread()和fwrite() 145
9.5.1 使用fread()和fwrite() 145
9.6 fseek()和随机存取I/O 146
9.7 fprintf()和fscanf() 147
9.8 标准流 148
9.8.1 控制台I/O连接 149
9.8.2 使用freopen()重定向标准流 149
10.2 #define 151
10.1 预处理程序 151
第十章 C语言的预处理程序和注释 151
10.2.1 定义类函数宏 152
10.3 #error 153
10.4 #include 153
10.5 条件编译指令 154
10.5.1 #if,#else,#elif和#endif 154
10.5.2 #ifdef和#ifndef 156
10.6 #undef 157
10.7 使用defined 157
10.8 #line 157
10.9 #pragma 158
10.10 #和##预处理操作符 158
10.12 注释 159
10.11 预定义的宏名 159
第十一章 C++概述 161
11.1 C++的起源 161
第二部分 C++的专有特征 161
11.2 面向对象的程序设计是什么 162
11.2.1 封装 162
11.2.2 多态性 163
11.2.3 继承性 163
11.3 C++的程序设计风格 163
11.3.1 关于I/O操作符 165
11.3.2 定义局部变量 166
11.4 C++的类 167
11.5 函数重载 170
11.7 继承性 172
11.6 运算符重载 172
11.8 构造函数和析构函数 175
11.9 C++的关键字 178
11.10 C++程序的一般结构 179
第十二章 类和对象 180
12.1 类 180
12.2 结构和类 183
12.3 联合和类 184
12.3.1 无名联合 185
12.4 友元函数 186
12.5 友元类 189
12.6 内联函数 190
12.7 在类中定义内联函数 192
12.8 参数化的构造函数 193
12.8.1 带一个参数的构造函数:特例 194
12.9 静态类成员 195
12.9.1 静态数据成员 195
12.9.2 静态成员函数 198
12.10 何时执行构造函数和析构函数 199
12.11 作用域分辨符 200
12.12 嵌套类 201
12.13 局部类 201
12.14 向函数传递对象 202
12.15 返回对象 203
12.15 对象赋值 204
第十三章 数组、指针和引用 205
13.1 对象数组 205
13.1.1 创建初始化与未初始化数组 206
13.2 指向对象的指针 207
13.3 C++指针的类型检查 209
13.4 this指针 209
13.5 指向派生类型的指针 211
13.6 指向类成员的指针 212
13.7 引用 214
13.7.1 引用参数 214
13.7.2 向对象传递引用 217
13.7.3 返回引用 218
13.7.4 独立引用 218
13.7.5 对引用的限制 219
13.8 格式问题 219
13.9 C++的动态分配符 220
13.9.1 分配对象 222
第十四章 函数和运算符重载 226
14.1 函数重载 226
14.1.1 函数重载和二义性 227
14.2 重载的过去和现在 230
14.3 重载构造函数 230
14.4 求重载函数的地址 231
14.5 运算符重载 232
14.5.1 创建成员operator函数 233
14.5.2 建立增值和减值运算符的前缀和后缀形式 236
14.5.3 重载缩写运算符 237
14.5.4 运算符重载限制 237
14.6 使用friend重载运算符 238
14.6.1 使用friend重载++和-- 239
14.6.2 friend operator函数增加了灵活性 241
14.7 重载new和delete 242
14.7.1 重载数组的new和delete 246
14.8 重载某些特殊运算符 247
14.8.1 重载[] 248
14.8.2 重载() 250
14.8.3 重载—> 251
14.9 重载逗号运算符 252
第十五章 继承性 254
15.1 基类存取控制 254
15.1.1 继承和受保护成员 255
15.1.2 受保护基类的继承 258
15.2 继承多个基类 259
15.3.1 何时执行构造函数和析构函数 260
15.3 构造函数、析构函数和继承 260
15.3.2 向基类构造函数传递参数 263
15.4 授权存取 265
15.5 虚基类 267
第十六章 虚函数和多态性 271
16.1 虚函数 271
16.1.1 继承虚属性 273
16.1.2 虚函数的层次性 274
16.2 纯虚函数 276
16.2.1 抽象类 278
16.3 使用虚函数 278
16.4 早期和后期联编 280
17.2 基本的流类 281
17.1 C++的流 281
第十七章 C++的I/O系统基础 281
17.2.1 C++的预定义流 282
17.3 格式化的I/O 282
17.3.1 用ios成员格式化 282
17.3.2 设置格式标志 283
17.3.3 清除格式标志 284
17.3.4 setf()的重载形式 284
17.3.5 检查格式标志 286
17.3.6 设置所有标志 288
17.3.7 使用width(),precision()和fill() 289
17.3.8 用操纵符格式化I/O 290
17.4 重载<<和>> 291
17.4.1 创建自己的插入符 292
17.4.2 创建自己的提取符 296
17.5 创建自己的操纵符函数 298
17.5.1 创建无参数的操纵符 298
17.5.2 创建带参数的操纵符 300
17.6 关于老式流类库的简短说明 303
第十八章 C++文件I/O 304
18.1 fstream.h和文件类 304
18.2 打开和关闭文件 304
18.3 读和写文本文件 306
18.4 二进制I/O 308
18.4.1 put()和get() 308
18.4.2 read()和write() 309
18.5 另外的get()函数 311
18.6 getline() 312
18.7 跟踪EOF 313
18.8 ignore()函数 314
18.9 peek()和putback() 315
18.10 flush() 315
18.11 随机存取 316
18.11.1 得到当前文件的位置 318
18.12 I/O状态 319
18.13 定制的I/O和文件 321
第十九章 基于数组的I/O 323
19.1 基于数组的类 323
19.2 创建基于数组的输出流 323
19.3 使用数组作输入 325
19.5 基于数组的输入/输出流 326
19.4 使用基于数组流的ios成员函数 326
19.6 数组内随机存取 327
19.7 使用动态数组 327
19.8 操纵符和基于数组的I/O 328
19.9 定制的提取符和插入符 329
19.10 基于数组格式的用途 331
第二十章 模板 332
20.1 样板函数 332
20.1.1 带两个样板类型的函数 334
20.1.2 显式重载样板函数 334
20.1.3 样板函数的限制 335
20.2 样板函数的应用 336
20.2.1 样板排序 336
20.2.2 紧缩数组 337
20.3 样板类 338
20.3.1 带两个样板数据类型的例子 341
20.4 创建样板数组类 342
第二十一章 异常处理 344
21.1 异常处理的基础 344
21.1.1 使用多重catch语句 348
21.2 异常处理选项 349
21.2.1 捕获所有异常 349
21.2.2 制异常 351
21.2.3 重复抛出异常 353
21.3 异常处理的应用 353
第二十二章 杂项问题和高级论题 355
22.1 缺省函数变元 355
22.1.2 缺省变元与重载 358
22.1.1 正确使用缺省变元 358
22.2 创建转换函数 359
22.3 拷贝构造函数 362
22.4 动态初始化 364
22.5 常量和可变成员函数 365
22.6 使用关键字asm 365
22.7 连接说明 366
22.8 建议的ANSIC++标准新增加的特性 366
22.8.1 新的类型强制运算符 367
22.8.2 布尔数据类型 368
22.8.3 使用名字域 368
22.8.4 运行时类型标识 368
22.8.5 显式构造函数 370
22.8.8 新的首标文件 371
22.9 C和C++之间的差别 371
22.8.6 使用mutable 371
22.8.7 wchar_t类型 371
第三部分 C++的一些应用 373
第二十三章 字符串类 373
23.1 定义字符串类型 373
23.2 字符串类 374
23.3 构造函数和析构函数 376
23.4 字符串I/O 377
23.5 赋值函数 378
23.6 连接 379
23.7 子字符串减法 381
23.8 关系运算符 382
23.9 各种字符串函数 383
23.10 完整的字符串类 384
23.11 StrType的使用 391
第二十四章 弹出式窗口类 393
24.1 弹出式窗口 393
24.2 创建一些视频支持函数 394
24.2.1 PC视频系统 394
24.2.2 存取BIOS 395
24.2.3 确定视频RAM的地址 396
24.2.4 写视频RAM 397
24.2.5 置光标 397
24.3 窗口类 398
24.4 显示和移去窗口 400
24.5 窗口I/O 402
24.6 一个完整的窗口系统 406
24.7 修改 416
第二十五章 链表类 417
25.1 简单双向链表类 417
25.1.1 store()函数 419
25.1.2 remove()函数 420
25.1.3 显示表 421
25.1.4 查找表中的对象 422
25.1.5 双向链表样板程序 422
25.2 定义一个样板双向链表类 427
25.2.1 样板链表类 427
25.2.2 完整的样板双向链表类 429
25.3 其它实现方法 436
附录 推荐的标准类库 437