译者序 1
前言 1
第0章 概述 1
参考文献 4
第1章 抽象 5
1.1 编程风格示例:计算机的定价 5
1.2 找出共同的抽象 8
1.3 类之间的区别 11
1.4 属性与行为 12
1.5 再次引入继承 15
1.6 去掉枚举 16
小结 18
参考文献 19
练习 19
第2章 一致性 23
2.1 编程风格示例:string类 23
2.2 明确定义的状态 25
2.3 物理状态的一致性 26
2.4 类不变性 27
2.5 动态内存的一致性 28
2.6 动态内存的回收 29
2.7 编程风格示例:第二种方法 31
小结 36
参考文献 37
练习 37
第3章 不必要的继承 41
3.1 编程风格示例:堆栈 41
3.2 继承作用域准则 44
3.3 继承关系 45
3.4 封装 49
3.5 接口与实现 51
3.6 模板 54
小结 55
练习 56
参考文献 56
第4章 虚函数 57
4.1 编程风格示例:车辆与车库 57
4.2 一致性 60
4.3 基类的析构函数 62
4.4 继承 63
4.5 耦合 65
小结 71
参考文献 71
练习 71
第5章 运算符的重载 73
5.1 运算符重载的基本概念 73
5.2 编程风格示例:FileArray类 77
5.3 对实现的继承 83
5.4 程序设计中的权衡:重载运算符和成员函数 88
小结 89
参考文献 89
练习 89
第6章 包装 91
6.1 一个用C编写的库 91
6.2 编程风格示例:用C++对dirent进行包装 92
6.3 多个Directory对象 93
6.4 构造函数中的失败 96
6.5 对失败状态的公有访问 98
6.6 错误信息参数 99
小结 103
参考文献 103
练习 104
第7章 效率 105
7.1 编程风格示例:BigInt类 106
7.2 BigInt的使用 111
7.3 动态字符串的长度 112
7.4 动态字符串的数量 114
7.5 客户代码 118
7.6 改写BigInt 119
小结 124
参考文献 125
练习 125
第8章 案例研究 127
8.1 编程风格示例:有限状态机 127
8.2 初始化 131
8.3 耦合 137
8.4 内聚 141
8.5 模块类与抽象数据类型 144
8.6 属性与行为 146
8.7 泛化 150
练习 154
参考文献 154
第9章 多重继承 155
9.1 多重继承中的二义性 155
9.2 有向无环继承图 157
9.3 分析虚基类 159
9.4 编程风格示例:Monitor类 165
9.5 编程风格示例:虚基类 169
9.6 多重协议继承 174
小结 176
参考文献 177
练习 177
第10章 规则总结 179