第1章 语言原则 1
1.1 程序设计 3
1.2 交流、抽象和精确性 6
1.3 表示法 8
1.4 工具集成 9
1.5 正确性 9
1.6 类型 14
1.7 灵活性、正确性和复用性 16
1.8 冗余和检查 19
1.9 封装和实现隐藏 21
1.10 安全性和代码品质的考虑 25
1.11 实现和部署的考虑 26
1.12 为什么要面向对象 27
1.13 关于程序设计语言的演化 27
1.14 数学的用途 28
1.15 遗产系统 28
第2章 实体和类型 31
2.1 从位到语义 31
2.2 基本结构:类 37
2.3 文法的用处 45
2.4 类和类型 48
2.5 结构(C++) 49
2.6 Typedef(C++) 49
2.7 全局环境 50
2.8 类的元数据 51
2.9 Obsolete (Eiffel) 54
2.10 不变式(Eiffel) 56
2.11 组件 58
第3章 模块与导入 63
3.1 命名空间 (C++) 64
3.2 群集 (Eiffel) 67
3.3 包 (Java) 69
3.4 头文件 (C++) 69
3.5 导入(Java) 73
3.6 ACE说明(Eiffel) 73
3.7 分离还是整合 74
第4章 成员和特性 77
4.1 基本结构 77
4.2 成员 (C++和Java) 88
4.3 类定义中的匿名参数 (C++) 88
4.4 缺省参数 (C++) 90
4.5 本地实体声明 (Java 和 C++) 92
4.6 内联(C++) 93
4.7 指针和引用 (C++) 98
4.8 声明和定义 (C++) 98
4.9 作用域 100
4.10 常量 100
4.11 静态(C++) 103
4.12 单次子程序 104
4.13 类变量和重定义 105
第5章 类型扩展:继承与虚拟 107
5.1 基本结构:继承和派生类 109
5.2 继承的本性 116
5.3 多重继承 121
5.4 虚类(C++) 129
5.5 嵌套类(Java和C++) 132
5.6 多态与继承 138
5.7 联合 139
5.8 枚举类型 143
5.9 名字重载 146
5.10 虚函数(C++) 152
5.11 纯虚函数(C++) 159
5.12 函数重载 (C++和Java) 162
5.13 虚拟与内联 168
第6章 类型扩展:泛型和模板(C++和Eiffel) 171
6.1 基本结构 173
6.2 C++语法 176
6.3 受束泛型 176
6.4 泛型和代码膨胀 177
6.5 泛型的替代形式 178
6.6 Java和泛型 182
6.7 一些关于泛型的理论 186
6.8 泛型和协变 189
第7章 接口和访问控制 191
7.1 基本结构 191
7.2 友元 (C++) 193
7.3 受控导出与友元 195
7.4 多接口 200
7.5 外部赋值(C++和Java) 201
7.6 导出控制和嵌套 202
7.7 可变常量(C++) 204
7.8 一般化 205
第8章 构造函数、析构函数和其他操作符 207
8.1 无名构造函数(C++) 207
8.2 缺省构造函数(C++和Java) 208
8.3 构造函数继承 208
8.4 扩展的初始化(Eiffel) 209
8.5 构造函数初始化(C++) 209
8.6 析构函数(C++) 211
8.7 Dispose(Eiffel) 211
8.8 =操作符(C++) 211
8.9 . 和 - (C++) 212
8.10 Delete和Delete [] (C++) 215
8.11 前缀和后缀运算符(C++) 216
8.12 || 和 && (C++) 217
8.13 运算符重载(C++和Eiffel) 218
8.14 隐式转换和重载(C++) 219
8.15 调用父类的特性 220
8.16 调用子类的特性 223
8.17 条件表达式 224
第9章 类型转换 225
9.1 类型转换(C++) 225
9.2 运行时类型识别和类型转换(C++) 228
9.3 新的类型转换(C++) 232
9.4 类型推导 232
9.5 Java和类型转换 233
9.6 签名变化(Eiffel) 233
第10章 编译时刻 247
10.1 全局分析 247
10.2 类型安全链接(C++) 249
10.3 类接口 251
第11章 运行时刻 253
11.1 并行——是时间了 253
11.2 垃圾收集 266
11.3 构造函数和临时变量(C++) 273
11.4 不良删除(C++) 274
11.5 切割(C++) 275
11.6 程序执行 276
11.7 动态链接 277
11.8 异常处理 279
11.9 链接错误(Java) 283
第12章 其他细节 285
12.1 注释 285
12.2 十六进制常量(Eiffel) 287
12.3 Double, double toil和trouble 288
12.4 类头部声明(C++) 290
第13章 项目、设计和其他因素 293
13.1 契约式设计 293
13.2 先验条件、类型、不变式 296
13.3 软件生命周期 297
13.4 CASE工具 301
13.5 复用性和交流 303
13.6 复用性和信任 304
13.7 复用性和兼容性 305
13.8 复用性和可移植性 307
13.9 复用性和尺寸 308
13.10 模式化编程 308
13.11 低级编码 309
13.12 知道正确的结构 310
13.13 效率与优化 310
13.14 标准化、稳定性和成熟度 312
13.15 复杂性 314
13.16 C++:面向对象语言的压倒多数选择 318
第14章 一般问题 321
14.1 指针 322
14.2 布尔类型 324
14.3 逻辑运算符和位运算符 326
14.4 数组 327
14.5 函数参数 331
14.6 void和void* 332
14.7 NULL 与0 338
14.8 char;signed和unsigned 339
14.9 void fn () 340
14.10 fn () 341
14.11 fn (void) 344
14.12 return 344
14.13 Switch语句 346
14.14 字符串中的元数据 347
14.15 ++, -- 348
14.16 赋值运算符 350
14.17 赋值表达式 352
14.18 宏定义 354
14.19 大小写敏感性 356
14.20 分号 359
14.21 注释 361
14.22 耦合因素(Cpaghe++i) 362
参考书目 365
术语表 375
索引 385