第一部分 精通I/O流 5
第一章 I/O流初步 7
流运算符 7
缺省的I/O对象 9
Windows中的缺省I/O对象 10
流怎样工作? 10
为什么要建立流? 12
发现错误 13
可扩充性 15
结束语 16
第二章 自定义插入运算 17
一个插入运算的例子 17
C的解决方案 18
Student类的封装 19
C+++的解决方案 20
一些值得注意的细节 24
什么是ostream,为什么要返回它? 25
还有其他重载operator<<++的方法吗? 26
作为成员函数 26
作为简单的非成员函数 27
相比较而言,哪种方法更好? 29
多态输出 29
结束语 34
第三章 文件流 35
使用流的文件I/O 35
文件的输出 35
文件输入 38
分支流 39
流的其他构造函数 42
完整的构造函数 42
文件句柄构造函数 43
缺省的构造函数 44
其他成员函数 45
get++函数 46
getline++函数 47
read++函数 48
put++函数 49
write++函数 49
结束语 49
第四章 编写你自己的流析取运算符 51
创建模型Student 51
显示的格式并不是便于存储的格式 56
加强对数据的错误检查 61
结束语 64
第五章 流的内部机制 65
这是什么状态? 65
错误标志 66
一个简单实例 68
一个改进后的版本 69
改变错误标志 73
从错误中恢复 78
附加支持类 79
什么是ios? 80
什么是streambuf? 80
把一个流系到另一个流上 81
为什么叫做streambuf? 81
结束语 82
第六章 流输出控制 83
用成员函数控制流输出格式 83
格式函数 84
让我们看一个例子 85
流的格式标志 86
其他标志控制函数 92
改写Student类 92
操纵算子 97
结束语 101
第七章 关于流的其他问题 103
内存中I/O 103
输出流 104
输入流 106
这样做有价值吗? 107
让类完成这个工作 113
怎样系和解系流 124
怎样系两个流对象 125
缓冲与标准I/O 126
建立自己的流类 127
彻底避免问题 127
重载流类 128
多态流类 129
结束语 133
第二部分 新增和改进的特征 135
C字符串 137
第八章 用string进行编码 137
NTBS函数带来的问题 138
NTBS的优点 141
string类 142
如何解决问题呢? 145
继续讨论类strng 146
输入/输出函数 146
操纵一个strng的内部 147
把一个strng转换成一个NTBS 149
使用了strng的一个程序例子 154
结束语:尽量使用string 159
第九章 常量扩展 161
替换预定义#define 161
#define的缺陷 163
const有什么限制吗? 165
外部常量 168
使用const对象 168
把const对象传递给函数 170
把const对象传递给成员函数 171
如果两者我都需要那又怎么办呢? 173
为什么要这样麻烦呢? 174
结束语 175
第十章 异常 177
错误处理 177
这样有什么问题? 178
累积一个错误状态:iostream流解决方法 181
C异常 182
C+++异常 184
异常的限制 188
抛出异常 189
Catch代码怎样知道如何做呢? 192
给类Student加上异常 194
结束语 196
第十一章 深入探讨异常 197
异常类 197
建立XError异常类 197
当XError还不够时该做什么? 199
C+++标准异常类的层次结构 202
异常并不总是致命的 203
避免需要过多的异常类 205
重抛出有其他用处吗? 209
回到Student例子上 211
异常的进一步考虑 222
结束语 223
第十二章 模板 225
模板函数 226
C没有提供这个功能吗? 227
模板的使用 228
混合模板 229
用类来实例化模板 230
模板类 231
一个可选择的方法 231
建立模板类Vector 234
成员函数怎么样? 235
模板和效率 236
更灵活的Vector 237
实例类的需求 241
结束语 242
第十三章 包容器 243
链表 243
一个简单的解决办法 244
更好的解决办法 246
Student链表 248
双向链表的问题 252
链表模板类 253
DLL溶合 259
休息 260
用一个迭代器的一个非侵入性解决办法 264
结束语 273
第十四章 进一步讨论包容器 275
包容器作为类的一个成员 275
商用包容器 278
Borland的模板类 278
标准C+++模板库 282
其他模板库 282
结束语 282
“是一个”对比“真的是一个” 283
第十五章 实时类型标识 283
怎样避免这个问题呢? 288
什么时候你不可能避免这个问题? 289
实时类型化 289
强制转换常量 291
结束语 292
第三部分 工资单问题 295
第十六章 分析与设计 297
问题描述 298
找出类 298
分组类 299
画出组间关系 301
加成员函数 304
结束语 307
第十七章 代码质量 309
改正问题的代价 309
编码风格 310
类模块 312
内聚 312
类间耦合 313
类的复杂度 313
City-State程序设计方法 313
为什么? 314
怎样做? 314
什么时候调用isLegal++是合法的? 316
结束语 317
第十八章 实现工资程序 319
工资单程序 319
Employee 320
Deduction 329
IncomeTax 332
Bank 337
异常 340
主程序 341
调试错误 344
查找实例错误 345
结束语 348
第四部分 捷径和提示汇总 349
第十九章 有关程序结构的提示 351
把问题弄清楚后再开始工作 351
对问题意见要一致 352
在具体实现前先设计好解法 352
不要害怕试验 352
寻找共性 353
提取类的公因子 353
第二十章 有关类结构的提示 355
让你的类代表某些事物 355
让你的类代表一件事 355
不要暴露数据成员 356
守好大门 356
为类写简介 356
限制友元的个数 357
保持接口简单 358
保持成员函数简单 358
第二十一章 调试捷径 359
根据类的接口调试每个类 359
保持和重用现有的类 359
包含广范的调试代码 360
固定使用一种编码风格 360
至少单步执行代码一次 360
获得帮助 360
第五部分 附录 361