第1篇 结构化程序设计 3
第1章 计算机基础知识 3
1.1信息在计算机中的表示和存储 3
1.1.1如何用0和1表示各种信息 3
1.1.2二进制和十六进制 4
1.1.3整数和小数的计算机表示 6
1.2计算机程序设计语言 7
1.2.1机器语言 7
1.2.2汇编语言 8
1.2.3高级语言 9
1.3 C++++语言的历史 10
1.4小结 11
习题 12
第2章 C++++语言的基本要素 13
2.1 C++++的标识符 13
2.2 C++++的关键字 13
2.3最简单的C++++程序 14
2.4变量 16
2.4.1变量的定义 16
2.4.2变量的初始化 16
2.4.3变量的赋值 17
2.4.4常变量 17
2.5 C++++的数据类型 17
2.5.1 C++++基本数据类型 17
2.5.2数据类型自动转换 18
2.5.3用cin读入类型不同的变量 20
2.6常量 20
2.6.1整型常量 21
2.6.2实数型常量 21
2.6.3布尔型常量 22
2.6.4字符型常量 22
2.6.5字符串常量 22
2.6.6符号常量 23
2.7运算符和表达式 23
2.7.1算术运算符 24
2.7.2赋值运算符 26
2.7.3关系运算符 27
2.7.4逻辑运算符和逻辑表达式 27
2.7.5位运算符 28
2.7.6条件运算符 32
2.7.7 sizeof运算符 33
2.7.8强制类型转换运算符 33
2.7.9逗号运算符 34
2.7.10运算符的优先级和结合性 34
2.8注释 35
2.9小结 36
习题 36
第3章 C++++语言的控制结构 39
3.1用if语句实现选择结构 39
3.2用switch语句实现选择结构 43
3.3用for语句实现循环结构 46
3.4用while语句实现循环结构 49
3.5用do.while语句实现循环结构 50
3.6用break语句跳出循环 50
3.7 continue语句 52
3.8 goto语句 52
3.9使用freopen方便程序调试 53
3.10小结 54
习题 54
第4章 函数 57
4.1函数的定义和调用 57
4.1.1函数的定义 57
4.1.2函数调用和return语句 58
4.1.3函数使用实例 58
4.2函数的声明 60
4.3 main函数 61
4.4函数参数的默认值 61
4.5引用和函数参数的传递 62
4.5.1引用的概念 62
4.5.2引用作为函数的返回值 63
4.5.3参数传值 63
4.5.4参数传引用 64
4.5.5常引用 65
4.6内联函数 66
4.7函数的重载 67
4.8库函数和头文件 68
4.9小结 70
习题 70
第5章 数组 72
5.1一维数组 72
5.2数组的大小限制 74
5.3二维数组 75
5.4数组的初始化 76
5.5数组作为函数的参数 78
5.6数组越界 79
5.6.1什么是数组越界 79
5.6.2数组越界的后果 80
5.7小结 81
习题 81
第6章 字符串 83
6.1字符串常量 83
6.2用字符数组存放的字符串 84
6.2.1用一维数组存放字符串 84
6.2.2用二维数组存放字符串 86
6.3字符串函数用法示例 86
6.4用string对象处理字符串 87
6.4.1定义string对象 88
6.4.2 string对象的输入输出 88
6.4.3 string对象的赋值 88
6.4.4 string对象的运算 89
6.4.5 string对象用法示例 89
6.5小结 90
习题 90
第7章 指针 92
7.1指针的基本概念 92
7.2指针的作用 94
7.3指针的互相赋值 94
7.4指针运算 95
7.5空指针 96
7.6指针作为函数参数 96
7.7指针和数组 98
7.8常量指针 100
7.9字符串和指针 101
7.9.1普通字符串和指针的关系 101
7.9.2 string对象和char指针的关系 101
7.9.3字符串操作库函数 102
7.10 void指针和内存操作库函数 106
7.11函数指针 107
7.11.1函数指针的定义 107
7.11.2函数指针的应用 108
7.12指针和动态内存分配 109
7.13指向指针的指针 111
7.14指针数组 112
7.15误用无效指针 117
7.16小结 117
习题 118
第8章 自定义数据类型 120
8.1结构 120
8.1.1结构的定义和使用 120
8.1.2访问结构变量的成员变量 122
8.1.3结构变量的初始化 122
8.1.4结构数组 123
8.1.5指向结构变量的指针 123
8.1.6动态分配结构变量和结构数组 125
8.1.7结构变量或引用作为函数形参 125
8.2联合 126
8.3枚举类型 128
8.4用typedef定义类型 129
8.5小结 130
习题 130
第9章 程序设计的基本思想 133
9.1枚举 133
9.2递归 138
9.3二分 144
9.4算法的时间复杂度及其表示法 145
9.5小结 147
习题 147
第10章 C++++程序结构 148
10.1全局变量和局部变量 148
10.2静态变量、自动变量和寄存器变量 149
10.3标识符的作用域 152
10.4变量的生存期 153
10.5预编译 153
10.5.1宏定义 154
10.5.2文件包含 154
10.5.3条件编译 156
10.6命令行参数 157
10.7多文件编程 159
10.7.1 C++++程序的编译过程 159
10.7.2多文件共享全局变量 160
10.7.3静态全局变量和静态全局函数 161
10.7.4多文件编程中的内联函数 162
10.7.5用条件编译避免头文件的重复包含 162
10.8小结 163
习题 163
第2篇 面向对象的程序设计 167
第11章 类和对象初步 167
11.1结构化程序设计的不足 167
11.2面向对象程序设计的概念和特点 169
11.3类的定义和使用 170
11.4类的示例程序剖析 171
11.5访问对象的成员 172
11.6类成员的可访问范围 173
11.7内联成员函数 176
11.8小结 176
习题 176
第12章 类和对象进阶 179
12.1构造函数 179
12.1.1构造函数的概念和作用 179
12.1.2构造函数在数组中的使用 181
12.1.3复制构造函数 183
12.1.4类型转换构造函数 187
12.2析构函数 188
12.3构造函数、析构函数和变量的生存期 190
12.4静态成员变量和静态成员函数 191
12.5常量对象和常量成员函数 194
12.6成员对象和封闭类 196
12.7 const成员和引用成员 199
12.8友元 199
12.8.1友元函数 200
12.8.2友元类 201
12.9 this指针 202
12.9.1 C++++程序到C程序的翻译 202
12.9.2 this指针的作用 203
12.10在多个文件中使用类 204
12.11小结 204
习题 205
第13章 运算符重载 209
13.1运算符重载的概念和原理 209
13.2重载赋值运算符“=” 210
13.3浅复制和深复制 213
13.4运算符重载为友元函数 215
13.5实例——长度可变的整型数组类 215
13.6重载流插入运算符和流提取运算符 218
13.7重载强制类型转换运算符 220
13.8重载自增、自减运算符 221
13.9运算符重载的注意事项 222
13.10小结 223
习题 223
第14章 继承与派生 227
14.1继承和派生的概念 227
14.2正确处理类的复合关系和继承关系 231
14.3 protected访问范围说明符 233
14.4派生类的构造函数和析构函数 234
14.5多层次的派生 236
14.6包含成员对象的派生类 237
14.7公有派生的赋值兼容规则 237
14.8基类与派生类的指针的互相转换 238
14.9私有派生和保护派生 240
14.10派生类和赋值运算符“=” 241
14.11多重继承 241
14.11.1多继承的概念及其引发的二义性 241
14.11.2用“虚继承”解决二义性 244
14.12小结 245
习题 245
第15章 多态与虚函数 247
15.1多态的基本概念 247
15.2多态的作用 250
15.3多态的实现原理 256
15.4关于多态的注意事项 258
15.5虚析构函数 261
15.6纯虚函数和抽象类 263
15.7小结 264
习题 264
第16章 输入输出流 269
16.1流类 269
16.2标准流对象 270
16.3使用流操纵算子控制输出格式 271
16.4调用cout的成员函数 274
16.5 cin的高级用法 275
16.5.1判断输入结束 275
16.5.2 istream类的成员函数 277
16.6 printf、 scanf等C语言标准输入输出库函数 282
16.7小结 286
习题 287
第17章 文件操作 288
17.1文件的概念 288
17.2 C++++文件流类 289
17.3文件的打开和关闭 290
17.4文件的读写 292
17.4.1文本文件的读写 292
17.4.2二进制文件的读写 294
17.4.3操作文件读写指针 298
17.5文本方式打开文件与二进制方式打开文件的区别 299
17.6小结 300
习题 300
第3篇 泛型程序设计 305
第18章 泛型程序设计与模板 305
18.1函数模板 305
18.2类模板 310
18.3类模板中的非类型参数 314
18.4类模板与继承 315
18.5类模板和友元 316
18.6类模板中的静态成员 320
18.7在多个文件中使用模板 321
18.8小结 321
习题 321
第19章 标准模板库STL 324
19.1 STL中的基本概念 324
19.1.1容器 325
19.1.2迭代器 326
19.1.3算法 331
19.1.4 STL中的“大”、“小”和“相等”的概念 332
19.2顺序容器 333
19.2.1动态数组vector 333
19.2.2双向链表list 336
19.2.3双向队列deque 339
19.3函数对象 339
19.4关联容器 346
19.4.1关联容器的预备知识:pair类模板 347
19.4.2 multiset 348
19.4.3 set 351
19.4.4 multimap 352
19.4.5 map 355
19.5容器适配器 357
19.5.1 stack 357
19.5.2 queue 358
19.5.3 priority_queue 359
19.6 STL算法分类 360
19.7不变序列算法 361
19.8变值算法 364
19.9删除算法 369
19.10变序算法 372
19.11排序算法 376
19.12有序区间算法 378
19.13 string类详解 382
19.14 bitset 387
19.15小结 389
习题 389
第4篇 C++++高级主题 395
第20章 C++++高级主题 395
20.1强制类型转换 395
20.2运行时类型检查 399
20.3智能指针auto_ptr 400
20.4 C++++异常处理 402
20.5名字空间 411
20.6 C++++11新特性管窥 418
20.6.1智能指针shared_ptr 418
20.6.2无序容器(哈希表) 419
20.6.3正则表达式 420
20.6.4 Lambda表达式 421
20.7小结 422
习题 422
附录A魔兽世界大作业 426
参考文献 428