第1章 概述 1
1.1 C++语言发展历史 1
1.2 一个简单的C++程序 2
1.3 编程的基本要求 4
1.4 C++程序的开发步骤 4
1.5 VC++开发环境简介 5
1.6 C++开发环境 7
1.7 本书组织结构 8
练习题 10
第2章 数据类型与变量 11
2.1 关键字和标识符 11
2.1.1 关键字 11
2.1.2 标识符 13
2.1.3 标点符号 13
2.1.4 分隔符 13
2.2 基本数据类型 14
2.2.1 布尔型 15
2.2.2 字符型 15
2.2.3 整型 15
2.2.4 浮点型 16
2.2.5 空类型 16
2.3 字面常量 17
2.3.1 逻辑常量 17
2.3.2 整型常量 17
2.3.3 实型常量 17
2.3.4 字符常量 18
2.3.5 字符串常量 19
2.4 变量 20
2.4.1 变量的说明 20
2.4.2 变量的初始化 20
2.4.3 变量的赋值 21
2.4.4 变量的输入输出 21
2.4.5 命名常量 24
小结 25
练习题 25
第3章 运算符与表达式 27
3.1 基本运算符 27
3.1.1 算术运算符 29
3.1.2 关系运算符 30
3.1.3 逻辑运算符 31
3.1.4 位运算符 32
3.1.5 条件运算符 35
3.1.6 赋值运算符 36
3.1.7 逗号运算符 37
3.1.8 自增、自减运算符 38
3.1.9 sizeof运算符 39
3.1.10 typeid运算符 40
3.2 表达式 41
3.2.1 左值表达式和右值表达式 41
3.2.2 算术表达式 41
3.2.3 赋值表达式 42
3.2.4 关系表达式 42
3.2.5 逻辑表达式 43
3.2.6 逗号表达式 43
3.2.7 表达式语句 44
3.3 类型转换 44
3.3.1 自动类型转换 44
3.3.2 赋值类型转换 46
3.3.3 强制类型转换 47
小结 49
练习题 50
第4章 基本语句 53
4.1 语句分类 53
4.1.1 说明语句 53
4.1.2 表达式语句 53
4.1.3 选择语句 54
4.1.4 循环语句 54
4.1.5 跳转语句 54
4.1.6 空语句 54
4.1.7 复合语句 54
4.1.8 异常处理语句 55
4.1.9 标号语句 55
4.2 程序的基本结构 55
4.2.1 顺序结构 55
4.2.2 选择结构 56
4.2.3 循环结构 56
4.3 选择语句 57
4.3.1 条件语句 58
4.3.2 开关语句 61
4.4 循环语句 64
4.4.1 while语句 64
4.4.2 do-while语句 66
4.4.3 for语句 67
4.4.4 循环语句的比较 69
4.4.5 循环的嵌套 69
4.5 跳转语句 70
4.5.1 break语句 70
4.5.2 continue语句 72
4.5.3 goto语句与标号语句 73
4.6 例子 73
小结 77
练习题 78
第5章 函数和编译预处理 81
5.1 函数的基本概念 81
5.1.1 库函数和用户定义函数 81
5.1.2 无参函数和有参函数 82
5.1.3 有返回值函数和无返回值函数 82
5.2 函数的定义 83
5.2.1 无参函数的定义 83
5.2.2 有参函数的定义 83
5.2.3 函数定义的要点 84
5.3 函数的调用 85
5.3.1 函数调用的形式 85
5.3.2 函数调用的方式 86
5.3.3 函数调用的要点 87
5.4 函数的重载 88
5.4.1 重载函数的定义 89
5.4.2 重载函数的调用 90
5.5 嵌套调用和递归调用 91
5.5.1 函数的嵌套调用 91
5.5.2 函数的递归调用 92
5.6 函数原型 97
5.7 特殊参数 99
5.7.1 带默认值的形参 99
5.7.2 可变参数 101
5.8 内联函数 103
5.9 作用域 104
5.9.1 块作用域 104
5.9.2 文件作用域 105
5.9.3 函数原型作用域 106
5.9.4 函数作用域 107
5.10 程序运行期的存储区域 107
5.10.1 静态存储区 107
5.10.2 全局存储区 108
5.10.3 动态存储区 108
5.11 存储类 108
5.11.1 auto变量 108
5.11.2 register变量 109
5.11.3 static变量与多文件项目 109
5.11.4 extern变量 112
5.11.5 存储类小结 113
5.12 编译预处理 114
5.12.1 包含文件 114
5.12.2 无参宏 115
5.12.3 有参宏 119
5.12.4 条件编译 120
5.12.5 条件编译示例 124
5.12.6 其他预处理指令 125
小结 126
练习题 127
第6章 数组 133
6.1 一维数组 133
6.1.1 一维数组的定义 133
6.1.2 一维数组的初始化 134
6.1.3 一维数组的使用 135
6.1.4 一维数组的应用 136
6.2 二维数组 143
6.2.1 二维数组的定义 143
6.2.2 二维数组的初始化 144
6.2.3 二维数组的应用 144
6.3 数组与函数 148
6.4 字符数组 151
6.4.1 字符数组的定义 151
6.4.2 字符数组的初始化 152
6.4.3 字符数组的输入输出 153
6.4.4 字符数组的操作 154
6.5 字符串处理函数 155
6.5.1 字符串处理函数 155
6.5.2 字符数组的应用 158
小结 160
练习题 161
第7章 结构、枚举、共同体 165
7.1 结构 165
7.1.1 结构类型的定义 165
7.1.2 定义结构变量 167
7.1.3 结构变量的初始化 169
7.1.4 结构变量的使用 169
7.1.5 结构的数组 172
7.1.6 结构中的静态成员 175
7.2 位域 177
7.2.1 位域的定义 178
7.2.2 位域的使用 179
7.3 枚举 181
7.3.1 枚举类型及枚举变量 181
7.3.2 枚举的使用 182
7.4 共同体 185
7.4.1 共同体类型的定义 185
7.4.2 共同体变量的说明及使用 185
7.5 类型定义typedef 191
小结 191
练习题 192
第8章 指针和引用 195
8.1 指针及指针变量 195
8.1.1 地址的概念 195
8.1.2 指针变量 197
8.1.3 指针的运算 198
8.2 指针与结构 202
8.2.1 结构的指针 202
8.2.2 指针作为结构成员 204
8.3 指针与数组 206
8.3.1 用指针访问数组 206
8.3.2 指针与字符串 211
8.3.3 指针的数组 213
8.4 指针与函数 222
8.4.1 指针作为形参 222
8.4.2 函数返回指针 223
8.4.3 函数的指针 224
8.5 void指针与const指针 229
8.5.1 void指针 229
8.5.2 const指针 232
8.6 动态使用内存 233
8.6.1 new和delete运算符 233
8.6.2 动态变量管理 237
8.6.3 注意要点 240
8.7 引用 241
8.7.1 引用变量的说明及使用 241
8.7.2 引用与数组、指针的关系 242
8.7.3 引用与函数 243
8.8 单向链表及其应用 246
8.8.1 链表概述 246
8.8.2 建立无序链表、遍历和撤销 249
8.8.3 添加、查找与删除元素 251
8.8.4 建立有序链表 256
8.8.5 链表的应用 257
小结 261
练习题 263
第9章 类和对象 269
9.1 类 269
9.1.1 类的定义 269
9.1.2 类成员的可见性 272
9.1.3 类的数据成员 273
9.1.4 类的成员函数 275
9.1.5 类与结构的区别 279
9.2 对象 280
9.2.1 对象的创建 280
9.2.2 访问对象的成员 281
9.2.3 类与对象的关系 283
9.3 this指针 284
9.4 类中还有什么? 285
小结 286
练习题 287
第10章 构造函数与析构函数 289
10.1 构造函数 289
10.1.1 构造函数的定义 289
10.1.2 默认构造函数 291
10.2 析构函数 292
10.3 拷贝构造函数与单参构造函数 294
10.3.1 拷贝构造函数 294
10.3.2 赋值操作函数 298
10.3.3 单参构造函数 304
10.4 复合对象与成员对象 306
10.4.1 构造过程 306
10.4.2 复合对象设计实例 309
10.4.3 复合对象设计要点 313
10.5 对象数组 314
10.5.1 定义和使用 314
10.5.2 对象数组作为成员 315
10.6 静态成员 318
10.6.1 静态数据成员 318
10.6.2 静态成员函数 320
10.7 const和volatile修饰符 321
10.7.1 修饰符const 321
10.7.2 修饰符volatile 323
10.8 指针成员 324
10.8.1 矩阵类 324
10.8.2 双向关联 329
10.9 引用成员 336
10.9.1 引用的问题 336
10.9.2 设计方案 337
10.9.3 编程实现 339
10.10 类成员的指针 346
10.10.1 数据成员的指针 346
10.10.2 成员函数的指针 348
小结 350
练习题 353
第11章 类的继承 357
11.1 继承与派生 357
11.1.1 基类与派生类 357
11.1.2 派生类的定义与构成 359
11.1.3 继承方式与访问控制 360
11.2 派生类的构造和析构 361
11.2.1 派生类的构造函数 361
11.2.2 派生类的析构函数 363
11.3 二义性问题 370
11.3.1 多继承造成的二义性 370
11.3.2 支配规则 371
11.4 虚基类 373
11.4.1 共同基类造成的二义性 373
11.4.2 虚基类的说明 374
11.4.3 虚基类的例子 376
11.5 子类型关系 378
11.6 虚函数 381
11.6.1 定义和使用 381
11.6.2 成员函数中调用虚函数 384
11.6.3 构造函数中调用虚函数 385
11.6.4 虚析构函数 386
11.6.5 纯虚函数与抽象类 387
11.6.6 抽象类的设计 389
11.7 例子:对象的链表 395
11.7.1 方案设计 395
11.7.2 对象结点编程 397
11.7.3 对象链表编程 398
11.7.4 对象链表的测试 401
11.8 继承性设计要点 405
小结 407
练习题 410
第12章 运算符重载 417
12.1 一般运算符重载 417
12.1.1 运算符重载函数 417
12.1.2 双目运算符的重载 418
12.1.3 单目运算符的重载 420
12.2 用友元函数实现运算符重载 422
12.2.1 友元函数 422
12.2.2 定义重载函数 422
12.3 特殊运算符的重载 426
12.3.1 赋值操作函数 426
12.3.2 类型转换函数 426
12.3.3 下标运算符 428
12.3.4 函数调用运算符 432
12.4 例子:字符串类 433
小结 440
练习题 441
第13章 模板 445
13.1 模板的概念 445
13.2 函数模板 446
13.2.1 定义 446
13.2.2 实例化 447
13.2.3 函数模板与有参宏的区别 448
13.2.4 模板函数的重载 449
13.2.5 函数模板的例子 450
13.3 类模板 452
13.3.1 定义 452
13.3.2 实例化 453
13.3.3 堆栈类模板 456
13.3.4 矩阵类模板 459
13.4 标准模板库STL简介 464
13.4.1 容器简介 464
13.4.2 迭代器简介 466
13.4.3 容器的共同类型和操作 468
13.4.4 vector,deque和list 469
13.4.5 set和multiset 475
13.4.6 map和multimap 477
13.4.7 stack,queue和priority_queue 482
13.4.8 算法简介 485
小结 485
练习题 486
第14章 输入输出流 489
14.1 概述 489
14.1.1 流Stream 489
14.1.2 文件 490
14.1.3 缓冲 490
14.2 基本流类 490
14.2.1 基本流类体系 491
14.2.2 预定义的标准流与提取和插入运算符 492
14.2.3 流的格式控制 492
14.2.4 流的错误处理 495
14.3 标准输入输出 496
14.3.1 不同类型的数据输入 497
14.3.2 输入操作的成员函数 498
14.3.3 不同类型的数据输出 500
14.3.4 输出操作的成员函数 500
14.3.5 重载提取和插入运算符 501
14.4 文件流 503
14.4.1 文件概述 503
14.4.2 文件处理的一般过程 504
14.4.3 文件的打开与关闭 504
14.4.4 文本文件的使用 508
14.4.5 二进制文件的使用 510
14.4.6 文件的随机访问 513
14.5 例子:学生分数管理 516
小结 524
练习题 525
第15章 异常 529
15.1 异常的概念 529
15.2 异常类型的架构 531
15.3 异常处理语句 533
15.3.1 throw语句 533
15.3.2 try-catch语句 535
15.3.3 例子 538
15.4 终止处理器 541
15.5 扩展新的异常类型 542
15.6 异常类型的应用 544
15.7 函数设计中的异常处理 547
15.8 异常可能导致内存泄漏 550
15.9 构造与析构中的异常 551
小结 554
练习题 555
第16章 ANSI C++标准语法补充 559
16.1 逻辑型bool 559
16.2 命名空间namespace 560
16.2.1 命名空间的定义 560
16.2.2 空间中成员的访问 562
16.3 修饰符explicit 565
16.4 修饰符mutable 566
16.5 RTTI与typeid 567
16.6 强制类型转换 569
16.6.1 static_cast运算符 570
16.6.2 dynamic_cast运算符 571
16.6.3 const_cast运算符 573
16.6.4 reinterpret_cast运算符 574
小结 575
附录A ASCII码表 577
附录B 常用库函数 579
参考文献 589