第1章面向对象基础 1
1.1程序设计范型 1
1.2程序设计与抽象的过程 2
1.3面向对象的基本概念 3
1.3.1封装 3
1.3.2对象和类 4
1.3.3接口、实现和消息传递 5
1.3.4信息/实现隐藏 7
1.3.5继承 7
1.3.6多态性 9
1.4面向对象程序的特点 11
1.5面向对象方法发展简史 12
1.6小结 13
1.7习题 13
第2章C++语言概览 15
2.1C++语言的特点 15
2.1.1C++的设计目标 15
2.1.2C++与C 16
2.2第一个C++程序 17
2.3C++与过程式程序设计 18
2.3.1函数 19
2.3.2名字空间(namespace) 19
2.4C++与基于对象的程序设计 20
2.5C++与面向对象程序设计 22
2.5.1类和对象 22
2.5.2继承 22
2.5.3虚函数和多态性 23
2.6C++与泛型程序设计 24
2.7异常处理 24
2.8C++程序的结构和编译 25
2.8.1程序结构 25
2.8.2分段编译 27
2.9C++开发工具 28
2.10小结 35
2.11习题 36
第3章C++基本语法 37
3.1数据类型 37
3.1.1内置数据类型 37
3.1.2指针 38
3.1.3引用 40
3.1.4数组 42
3.1.5结构体 43
3.1.6联合(共用体) 45
3.1.7枚举 45
3.1.8类类型 46
3.2常量和变量 49
3.2.1内置数据类型的文字常量 49
3.2.2变量和标识符 50
3.2.3const限定词 52
3.2.4volatile限定词 57
3.3运算符和表达式 57
3.3.1算术运算符 58
3.3.2关系和逻辑运算符 58
3.3.3赋值运算符 58
3.3.4自增和自减 59
3.3.5位运算符 60
3.3.6sizeof运算符 60
3.3.7new和delete 61
3.3.8条件运算符 63
3.3.9逗号运算符 64
3.3.10运算符的优先级 64
3.3.11类型转换 64
3.4语句 67
3.4.1简单语句和复合语句 67
3.4.2声明语句 67
3.4.3if语句 68
3.4.4switch语句 69
3.4.5while语句 71
3.4.6for语句 72
3.4.7dowhile语句 72
3.4.8break和continue 73
3.4.9goto语句 74
3.5小结 75
3.6习题 75
3.6.1课后练习 75
3.6.2常见面试题 77
第4章函数 80
4.1函数的基本概念 80
4.1.1函数定义 80
4.1.2函数的调用和返回 81
4.1.3函数声明 92
4.1.4递归函数 93
4.2inline函数 93
4.2.1函数与带参数的宏 93
4.2.2语法和概念 94
4.3缺省函数参数 94
4.3.1如何使函数调用更简便 94
4.3.2语法和概念 95
4.4重载函数 95
4.4.1为一组表达相同概念的函数命名 95
4.4.2语法和概念 96
4.4.3重载函数解析 97
4.4.4重载函数和缺省参数函数 101
4.5链接指示符:extern“C” 101
4.6函数指针 102
4.6.1定义函数指针 102
4.6.2使用函数指针 102
4.6.3函数指针的数组 103
4.7名字空间 104
4.7.1全局名字冲突 104
4.7.2名字空间的定义 104
4.7.3名字空间成员的使用 106
4.7.4标准名字空间std 107
4.8作用域和存储期 109
4.8.1作用域(Scope) 109
4.8.2存储期(Storage Duration) 114
4.9程序代码组织 115
4.9.1声明和头文件包含 116
4.9.2函数代码的组织 117
4.9.3名字空间的代码组织 117
4.10设计高质量的函数 118
4.10.1创建函数的理由 118
4.10.2函数的命名 119
4.10.3如何使用函数的参数 120
4.10.4设置函数的返回值 120
4.11小结 121
4.12习题 121
4.12.1课后练习 121
4.12.2常见面试题 124
第5章 类和对象 125
5.1类的定义 125
5.1.1基本语言定义的ADT 125
5.1.2数据成员与成员函数 127
5.1.3访问限定和信息隐藏 130
5.1.4类和对象 133
5.1.5 this指针 134
5.1.6访问器函数 136
5.1.7友元 136
5.1.8句柄类——进一步的信息隐藏 138
5.2对象的创建与销毁 141
5.2.1构造函数 142
5.2.2析构函数 149
5.2.3构造函数和析构函数的调用 151
5.3类设计的例子 151
5.3.1类的设计 152
5.3.2类的UML表示法 152
5.3.3动态字符栈类 153
5.3.4字符串类 154
5.3.5单链表类 157
5.4 const成员 160
5.4.1 const数据成员 160
5.4.2 const成员函数 160
5.4.3 mutable成员 163
5.4.4 const用法小结 164
5.5 static成员 165
5.5.1 static数据成员 166
5.5.2 static成员函数 168
5.5.3单件模式(Singleton) 168
5.5.4 static用法小结 169
5.6指向成员的指针 170
5.6.1数据成员的指针 170
5.6.2成员函数的指针 171
5.7类代码的组织 173
5.8小结 174
5.9习题 174
5.9.1课后练习 174
5.9.2常见面试题 179
第6章 运算符重载 180
6.1运算符重载的基本语法 180
6.1.1运算符函数 181
6.1.2运算符重载的限制 182
6.2常用运算符的重载 182
6.2.1一元运算符 183
6.2.2二元运算符 186
6.2.3运算符函数的参数和返回类型 190
6.2.4全局运算符和成员运算符 190
6.2.5重载输入/输出运算符 191
6.3重载赋值运算符 193
6.3.1自赋值检测 193
6.3.2引用计数和写拷贝 196
6.3.3自动创建的operator= 199
6.3.4编译器自动生成的成员函数 199
6.4重载下标运算符 200
6.5用户定义的类型转换 202
6.5.1类型转换运算符 202
6.5.2自动类型转换可能引起的二义性问题 204
6.6小结 205
6.7习题 206
6.7.1课后练习 206
6.7.2常见面试题 207
第7章 包含与继承 208
7.1包含——复用类的实现 208
7.1.1对象成员 209
7.1.2对象成员的初始化 211
7.1.3包含的进一步讨论 212
7.2继承——复用类的接口 215
7.2.1继承的语法 215
7.2.2基类成员在派生类中的可见性 216
7.2.3公有继承和私有继承 220
7.2.4派生类对象的创建和撤销 222
7.2.5派生类对基类的修改 225
7.2.6替代原则——向上类型转换 230
7.2.7不能自动继承的成员 233
7.3多重继承 233
7.3.1多重继承的二义性 235
7.3.2虚基类 236
7.4包含与继承的选择 237
7.4.1包含的应用 238
7.4.2继承的应用 240
7.5小结 242
7.6习题 243
7.6.1课后练习 243
7.6.2常见面试题 246
第8章 虚函数与多态性 248
8.1向上类型转换 248
8.2虚函数 250
8.2.1函数调用绑定 250
8.2.2虚函数 250
8.2.3虚函数的相关规则 253
8.2.4实现多态性的步骤 255
8.2.5动态绑定的实现 257
8.3抽象类 261
8.4 RTTI 264
8.4.1 dynamic cast与向下类型转换 264
8.4.2 typeid 267
8.5类层次设计的例子 268
8.5.1模仿钓鱼的例子 268
8.5.2零件库存管理的例子 271
8.6小结 276
8.7习题 276
8.7.1课后练习 276
8.7.2常见面试题 278
第9章 模板 280
9.1函数模板 280
9.1.1函数模板的定义 280
9.1.2函数模板的实例化 282
9.1.3函数模板的重载 284
9.2类模板 285
9.2.1类模板的定义 286
9.2.2类模板的实例化 287
9.2.3类模板的成员函数 287
9.2.4模板的非类型参数 288
9.2.5类模板的静态数据成员 289
9.2.6类模板的友元 289
9.3模板的编译模式 290
9.3.1包含编译模式 290
9.3.2分离编译模式 293
9.4模板和代码复用 295
9.5小结 295
9.6习题 296
9.6.1课后练习 296
9.6.2常见面试题 296
第10章 异常处理 297
10.1抛出异常 297
10.2 try块 299
10.3捕获异常 302
10.3.1异常对象 303
10.3.2异常处理流程 304
10.3.3重新抛出异常 305
10.3.4捕获所有异常 306
10.3.5程序终止 306
10.4异常规范 307
10.5异常类层次 308
10.5.1定义异常类型 308
10.5.2异常对象和虚函数 310
10.5.3处理类类型的异常 311
10.5.4 C++标准库的异常类层次 311
10.6异常和错误处理技术 312
10.6.1输入数据检验 312
10.6.2断言 313
10.6.3错误处理技术 314
10.6.4异常的使用 315
10.7小结 316
10.8习题 316
10.8.1课后练习 316
10.8.2常见面试题 318
第11章 输入/输出流 319
11.1输入/输出流类层次 319
11.2终端输入/输出 320
11.2.1基本输入/输出 320
11.2.2其他输入/输出操作 321
11.2.3操纵符 324
11.3文件输入/输出 325
11.4字符串流 329
11.5小结 331
11.6习题 331
11.6.1课后练习 331
11.6.2常见面试题 332
第12章 标准模板库 333
12.1 STL概览 333
12.2顺序容器 335
12.2.1容器对象的定义 335
12.2.2容器的操作 335
12.3迭代器 337
12.3.1迭代器的运算 337
12.3.2与迭代器有关的容器操作 339
12.4关联容器 341
12.4.1 map 341
12.4.2 set 342
12.5泛型算法 343
12.5.1查找 343
12.5.2排序 343
12.6小结 344
12.7习题 345
12.7.1课后练习 345
12.7.2常见面试题 345
附录A 346
参考文献 351