第一部分 C++基础:类C特性 2
第一章 C语言概述 2
1.1 C语言的起源 2
1.2 C语言是中级语言 2
目录 2
1.3 C语言是结构化语言 3
1.4 C语言是程序员的语言 4
1.5 C语言的程序结构 5
1.6 库和连接 6
1.7 分离编译 7
2.1 五种基本数据类型 8
第二章 表达式 8
2.2 修饰基本类型 9
2.3 标识符命名 10
2.4 变量 10
2.4.1 变量在哪里说明 10
2.4.2 局部变量 11
2.4.3 形式参数 13
2.4.4 全局变量 13
2.5 存取修饰符 14
2.5.1 const 15
2.6 存储分类符 16
2.6.1 外部的 16
2.5.2 volatile 16
2.6.2 静态变量 17
2.6.3 寄存器变量 19
2.7 变量初始化 20
2.8 常量 21
2.8.1 十六进制和八进制常量 21
2.8.2 串常量 22
2.8.3 反斜线字符常量 22
2.9 运算符 23
2.9.1 赋值运算符 23
2.9.2 赋值中的类型转换 23
2.9.4 算术运算符 24
2.9.3 多重赋值 24
2.9.5 增量和减量运算符 25
2.9.6 关系和逻辑运算符 26
2.9.7 位操作符 28
2.9.8 ?操作符 31
2.9.9 指针操作符&和* 31
2.9.10 编译时操作符sizeof 33
2.9.11 逗号操作符 33
2.9.12 点(.)和箭头(-〉)操作符 34
2.9.13 方括号[]和括号()操作符 34
2.9.14 关于优先级的小结 34
2.10.1 求值顺序 35
2.10.2 表达式中的类型转换 35
2.10 表达式 35
2.10.3 构成符 36
2.10.4 空格与括号 37
2.10.5 C语言中的简写形式 37
第三章 C语言的语句 38
3.1 C语言的真值和假值 38
3.2 选择语句 38
3.2.1 if语句 39
3.2.2 嵌套的if语句 40
3.2.3 多重嵌套的if语句:阶梯型if-else-if语句 41
3.2.4 操作符?的替代 42
3.2.6 switch开关语句 45
3.2.5 条件表达式 45
3.2.7 嵌套的switch语句 48
3.3 迭代语句 48
3.3.1 for循环 48
3.3.2 for循环的变化形式 49
3.3.3 无限循环 52
3.3.4 没有循环体的for循环 53
3.3.5 while循环 53
3.3.6 do-while循环 55
3.4 转移语句 56
3.4.1 return语句 56
3.4.2 goto语句 56
3.4.3 break语句 57
3.4.4 exit语句 58
3.4.5 continue语句 59
3.5 表达式语句 60
3.6 块语句 61
第四章 数组和字符串 62
4.1 一维数组 62
4.2 产生指向数组的指针 63
4.3 向函数传递一维数组 64
4.4 字符串 65
4.5 二维数组 66
4.5.1 字符串数组 69
4.7 带下标的指针 71
4.6 多维数组 71
4.8 数组初始化 73
4.8.1 变长数组的初始化 74
4.9 棋盘游戏实例 75
第五章 指针 78
5.1 指针是什么 78
5.2 指针变量 78
5.3 指针运算符 79
5.4 指针表达式 80
5.4.1 指针赋值 80
5.4.2 指针运算 80
5.4.3 指针比较 81
5.5 指针和数组是紧密相联的 83
5.5.1 指针数组 84
5.6 多级间址 85
5.7 指针的初始化 86
5.8 指向函数的指针 87
5.9 C语言的动态分配函数 89
5.10 指针应用中的某些问题 90
第六章 函数 94
6.1 函数的一般形式 94
6.2 函数作用域的规则 95
6.3 函数变元 95
6.3.2 引用调用的建立 96
6.3.1 传值调用与引用调用 96
6.3.3 用数组调用函数 97
6.4 传给main()的变元argc与argv 99
6.5 返回语句 102
6.5.1 从函数返回 102
6.5.2 返回值 103
6.6 返回非整型值的函数 104
6.7 函数原型 106
6.8 返回指针 107
6.9 void类型的函数 108
6.10 main()返回什么? 109
6.11 递归 109
6.13 传统的与现代的函数说明 110
6.12 说明变长参数表 110
6.14 实现问题 111
6.14.1 参数和通用函数 111
6.14.2 效率 112
第七章 结构、联合、枚举和用户定义的类型 113
7.1 结构 113
7.1.1 引用结构元素 115
7.1.2 结构赋值 115
7.2 结构数组 116
7.3 向函数传递结构 116
7.3.1 向函数传递结构元素 116
7.3.2 向函数传递完整结构 117
7.4 结构指针 118
7.4.1 结构指针的应用 118
7.5 结构中的数组和结构 120
7.6 位域 121
7.7 联合 122
7.8 枚举 124
7.9 用sizeof增强移植性 127
7.10 类型定义typedef 127
第八章 控制台I/O 129
8.1 一个重要的应用说明 129
8.2 读写字符 130
8.2.1 getchar()的有关问题 130
8.3 读写字符串 131
8.2.2 getchar()的替代 131
8.4 格式化的控制台I/O 134
8.5 printf() 134
8.5.1 打印字符 135
8.5.2 打印数字 135
8.5.3 显示一个地址 136
8.5.4 %n描述符 136
8.5.5 格式化代码修饰符 136
8.5.6 最小域宽描述符 137
8.5.7 精度描述符 138
8.5.10 *和#修饰符 139
8.5.9 处理其它数据类型 139
8.5.8 调整输出 139
8.6 scanf() 140
8.6.1 格式说明符 140
8.6.2 输入数字 141
8.6.3 输入无符号整数 141
8.6.4 用scanf()读单个字符 141
8.6.5 读字符串 141
8.6.6 读入地址 142
8.6.7 %n描述符 142
8.6.8 使用一个扫描集 142
8.6.10 控制串中的非空白符 143
8.6.11 必须向scanf()传递地址 143
8.6.9 丢弃不期望的空白符 143
8.6.12 格式化修饰符 144
8.6.13 压缩输入 144
第九章 ANSIC的标准文件I/O 145
9.1 历史回顾 145
9.2 流和文件 145
9.2.1 流 145
9.2.2 文件 146
9.3 文件系统基础 146
9.3.1 文件指针 147
9.3.2 打开一个文件 147
9.3.5 读一个字符 149
9.3.4 写一个字符 149
9.3.3 关闭一个文件 149
9.3.6 使用fopen(),getc(),putc()和fclose() 150
9.3.7 使用feof() 151
9.3.8 用fputs()和fgets()操作字符串 152
9.3.9 rewind() 153
9.3.10 ferror() 154
9.3.11 删除文件 156
9.3.12 清除一个流 157
9.4 fread()和fwrite() 157
9.4.1 使用fread()和fwrite() 157
9.5 freek()和随机存取I/O 158
9.6 fprintf()和fscanf() 160
9.7.1 控制台I/O连接 161
9.7 标准流 161
9.7.2 使用freopen()重定向标准流 162
第十章 C语言的预处理程序和注释 164
10.1 C语言的预处理程序 164
10.2 #define 165
10.3 #error 166
10.4 #include 167
10.5 条件编译指令 167
10.5.1 #if,#else,#elif,和#endif 167
10.5.2 #ifdef和#ifndef 170
10.6 #undef 171
10.7 #line 171
10.8 #pragam 172
10.9 #和##预处理操作符 172
10.10 预定义的宏名 173
10.11 注释 173
第十一章 C++概述 176
11.1 C++的起源 176
第二部分 C++的专有特征 176
11.2 面向对象的程序设计是什么 177
11.2.1 对象 177
11.2.2 多态性 178
11.2.3 继承性 178
11.3 C++的程序设计风格 178
11.4 C++的类 182
11.5 函数重载 185
11.7 继承性 187
11.6 运算符重载 187
11.8 构造函数和析构函数 192
11.9 C++的关键字 195
11.10 C++程序的一般结构 195
第十二章 类和对象 197
12.1 类 197
12.2 结构和类 200
12.3 联合和类 201
12.4 友元函数 203
12.5 内联函数 207
12.6 在类中定义内联函数 209
12.7 参数化的构造函数 210
12.8 静态类成员 212
12.8.1 静态数据成员 212
12.8.2 静态成员函数 214
12.9 何时执行构造函数和析构函数 216
12.10 嵌套类 217
12.11 作用域分辨符 217
12.12 局部类 218
12.13 向函数传递对象 219
12.14 返回对象 220
12.15 对象赋值 221
第十三章 数组、指针和引用 223
13.1 对象数组 223
13.2 指向对象的指针 225
13.3 this指针 226
13.4 指向派生类型的指针 228
13.5 指向类成员的指针 230
13.6.1 引用参数 232
13.6 引用 232
13.6.2 向对象传递引用 234
13.6.3 返回引用 235
13.6.4 独立引用 236
13.6.5 对引用的限制 237
13.7 格式问题 237
13.8 C++的动态分配符 238
13.8.1 分配对象 240
14.1 函数重载 245
第十四章 函数和运算符重载 245
14.1.1 函数重载和二义性 246
14.2 重载的过去和现在 249
14.3 重载构造函数 249
14.4 求重载函数的地址 251
14.5 运算符重载 252
14.5.1 创建成员operator函数 252
14.6 使用friend重载运算符 257
14.6.1 使用friend重载++和-- 258
14.6.2 friend operator函数增加了灵活性 260
20.1.1 正确使用缺省变元 262
14.7 重载的new和delete 262
14.8 重载某些特殊运算符 265
14.8.1 重载[] 266
14.8.2 重载() 268
14.8.3 重载-〉 270
14.9 重载逗号运算符 270
第十五章 继承性 273
15.1 基类存取控制 273
15.1.1 继承和受保护成员 275
15.2 继承多个基类 278
15.3 构造函数、析构函数和继承 279
15.3.1 何时执行构造函数和析构函数 279
15.3.2 向基类构造函数传递参数 282
15.4 授权存取 285
15.5 虚基类 287
第十六章 虚函数和多态性 291
16.1 虚函数 291
16.1.1 继承虚属性 293
16.1.2 虚函数的层次性 294
16.2 纯虚函数 297
16.2.1 抽象类 298
16.3 使用虚函数 299
16.4 早期和后期联编 301
17.2 基本的流类 302
第十七章 C++的I/O系统基础 302
17.1 C++的流 302
17.3.1 用ios成员格式化 303
17.2.1 C++的预定义流 303
17.3 格式化的I/O 303
17.3.2 设置格式标志 304
17.3.3 清除格式标志 305
17.3.4 setf()的重载形式 305
17.3.5 检查格式标志 307
17.3.6 设置所有标志 309
17.3.7 使用width()、precision()和fill() 310
17.3.8 用操纵符格式化I/O 311
17.4 重载〈〈和〉〉 313
17.4.1 创建自己的插入符 313
17.4.2 创建自己的提取符 318
17.5 创建自己的操纵符函数 320
17.5.1 创建无参数的操纵符 320
17.5.2 创建带参数的操纵符 323
17.6 关于老式流类库的简短说明 326
第十八章 C++文件I/O 327
18.1 fstream.h和文件类 327
18.2 打开和关闭文件 327
18.3 读和写文本文件 329
18.4 二进制I/O 331
18.4.1 put()和get() 331
18.4.2 read()和write() 333
18.6 getline() 335
18.5 另外的get()函数 335
18.7 跟踪EOF 336
18.8 ignore()函数 338
18.9 peek()和putback() 339
18.10 flush() 339
18.11 随机存取 339
18.12 I/O状态 343
18.13 定制的I/O和文件 344
19.2 创建基于数组的输出流 348
19.1 基于数组的类 348
第十九章 基于数组的I/O 348
19.3 使用数组作输入 350
19.4 使用二进制I/O 352
19.5 基于数组的输入/输出流 352
19.6 数组内随机存取 353
19.7 使用动态数组 353
19.8 操纵符和基于数组的I/O 354
19.9 定制的提取符和插入符 355
19.10 基于数组格式的用途 357
第二十章 问题和高级论题 359
20.1 缺省函数变元 359
20.2 创建转换函数 363
20.3 拷贝构造函数 366
20.4 动态初始化 368
20.5 常量和可变成员函数 368
20.6 使用关键字asm 369
20.7 连接说明 369
20.8 以前的重载 370
20.9 C和C++之间的区别 370
20.10 C++的发展方向 371
第三部分 C++的一些应用 373
第二十一章 字符串类 373
21.1 定义字符串类型 373
21.2 字符串类 374
21.3 构造函数和析构函数 376
21.4 字符串I/O 377
21.5 赋值函数 378
21.6 连接 380
21.7 子字符串减法 381
21.8 关系运算符 383
21.9 各种字符串函数 384
21.10 完整的字符串类 385
21.11 字符串的使用 393
第二十二章 弹出式窗口类 396
22.1 弹出式窗口 396
22.2.1 PC视频系统 397
22.2 创建一些视频支持函数 397
22.2.2 存取BIOS 398
22.2.3 确定视频RAM的地址 399
22.2.4 写视频RAM 399
22.2.5 置光标 400
22.3 窗口类 401
22.4 显示和移去窗口 403
22.5 窗口I/O 406
22.6 一个完整的窗口系统 410
22.7 修改 421
第二十三章 链表类 423
23.1 双向链表类 423
23.1.1 store()函数 425
23.1.2 remove()函数 426
23.1.3 显示表 427
23.1.4 改变和查找表中的对象 428
23.1.5 完整的dblink类和样板程序 428
23.2 定义一个样板双向链表基类 433
23.2.1 双向链表基类 434
23.2.2 定义说明双向链表类 434
23.3 其它实现方法 439
附录A 一些公共类 441
A.1 复数类 441
A.2 BCD类 443