第1章 高质量软件开发之道 1
1.1 软件质量基本概念 2
1.1.1 如何理解软件的质量 2
1.1.2 提高软件质量的基本方法 4
1.1.3 “零缺陷”理念 5
1.2 细说软件质量属性 6
1.2.1 正确性 6
1.2.2 健壮能 6
1.2.3 可靠性 7
1.2.4 性能 7
1.2.6 清晰性 8
1.2.5 易用性 8
1.2.7 安全性 9
1.2.8 可扩展性 9
1.2.9 兼容性 10
1.2.10 可移植性 10
1.3 人们关注的不仅是质量 10
1.3.1 质量、生产率和成本之间的关系 10
1.3.2 软件过程改进基本概念 13
1.4 高质量软件开发的基本方法 15
1.4.1 建立软件过程规范 15
1.4.2 复用 18
1.4.4 优化与折衷 20
1.4.3 分而治之 20
1.4.5 技术评审 21
1.4.6 测试 24
1.4.7 质量保证 26
1.4.8 改错 27
1.5 关于软件开发的一些起常识和思考 29
1.5.1 有最好的编程语言吧 29
1.5.3 编程时应该多使用技巧吗 30
1.5.4 换更快的计算机还是换更快的算法 30
1.5.2 编程是一门艺术吗 30
1.5.5 错误是否应该分等级 31
1.5.6 一些错误的观念 31
1.6 小结 32
第2章 做好程序员 33
2.1 漫谈程序员 34
2.2 职业道德 35
2.2.1 上班时间不干与工作无关的事情 36
2.2.2 不损害集体利益 37
2.2.3 不干危害社会的事情 37
2.3 工作态度 38
2.3.1 认真负责 38
2.3.2 服务意识 39
2.4 高效率地工作 40
2.4.1 合理安排一天的时间 40
2.4.2 减少路上花费的时间 42
2.4.3 开会 43
2.4.5 随时记录 44
2.5 程序员佩服什么样的项目经理 44
2.4.4 处理电子邮件 45
2.5.1 丰富的产品开发经验和比较高的技术水平 45
2.5.2 懂得管理事和管人 45
2.5.3 较好的人格魅力 46
2.6 将程序员培养成为经理 47
2.7 程序员升为项目经理后是否还要编程 48
2.8 学无止境 52
2.8.1 不断学习新技术 52
2.8.2 提高综合才能 53
2.8.3 向错误与失败学习 55
2.9 小结 57
第3章 编程语言发展简史 59
3.1 编程语言大事记 60
3.2 Ada的故事 64
3.3 C++的演化 64
3.4 Borland 与Microsoft之争 66
3.5 Java 阵营与Microsoft 的较量 67
3.6 小结 70
第4章 C++面向对象程序设计方法概述 71
4.1 漫谈面向对象 72
4.2 信息隐藏与类的填充装特性 73
4.3 类的继承特性 74
4.4 类的组合特性 76
4.5 动态的特性 78
4.5.1 虚函数 78
4.5.2 抽象基类 79
4.5.3 动态联编 80
4.5.4 多态性 81
4.6 小结 82
第5章 文件结构 83
5.1 版权和版本的声明 84
5.2 头文件的结构 84
5.3 定义文件的结构 86
5.4 头文件的作用 86
5.5 目录结构 87
第6章 程序的版式 89
6.1 空行 90
6.2 代码行 90
6.3 代码行内的空格 92
6.4 对齐 93
6.5 长行拆分 94
6.6 修饰符的位置 95
6.7 注释 95
6.8 类的版式 96
第7章 命名规则 99
7.1 共性规则 100
7.2 简单的Windows应用程序命名规则 101
第8章 表达式与基本语句 103
8.1 运算符的优先级 104
8.3.1 布尔变量与零值比较 105
8.3 if语句 105
8.2 复合表达式 105
8.3.2 整型变量与零值比较 106
8.3.3 浮点变量与零值比较 106
8.3.4 指针变量与零值比较 106
8.3.5 对if语句的补充说明 107
8.4 循环语句的效率 107
8.5 for语句的循环控制变量 109
8.6 switch语句 109
8.7 goto语句 110
第9章 常量 113
9.3 常量定义的规则 114
9.2 cont 与#sifine的比较 114
9.1 为什么需要常量 114
9.4 类中的常量 115
第10章 函数设计 117
10.1 参数的规则 118
10.2 返回值的规则 119
10.3 函数内部实现的规则 122
10.4 其他建议 123
10.5 使用断言 123
10.6 引用与指针的比较 125
第11章 内存管理 129
11.2 常见的内存错误及其对策 130
11.1 内存分配方式 130
11.3 指针与数组的对比 131
11.3.1 修改内容 132
11.3.2 内容复制与比较 132
11.3.3 计算机内存容量 133
11.4 指针参数是如何传递内存的 134
11.5 free 与delete把指针怎么啦 137
11.6 动态内存会被自动释放吗 137
11.7 杜绝“野指针” 138
11.8 有了malloc/free 为什么还要new/delete 139
11.9 内存耗尽怎么办 141
11.10 malloc/free的使用要点 143
11.11 mew/delete的使用要点 144
第12章 C++函数的高级特性 147
12.1 函数重载的概念 148
12.1.1 重载的起源 148
12.1.2 重载是如何实现的 148
12.1.3 当心隐式类型转换导致重载函数产生二义性 150
12.2 成员函数的重载、覆盖与隐藏 151
12.2.1 重载与覆盖 151
12.2.2 令人迷惑的隐藏规则 152
12.2.3 摆脱隐藏 154
12.3 参数的默认值 155
12.4 运算符重载 157
12.4.1 概念 157
12.4.2 不能被重载的运算符 158
12.5 函数内联 158
12.5.1 用内联取代宏代码 158
12.5.2 内联函数的编程风格 160
12.5.3 慎有内联 161
第13章 类的构造函数、析构与赋值函数 163
13.1 构造函数与折构函数的起源 165
13.2 构造函数的初始化表/ 165
13.4 示例:类String 的构造函数与析构函数 168
13.3 构造和析构的次序 168
13.5 不要轻视拷贝构造函数与赋值函数 169
13.6 示例:类String的拷贝构造函数与赋值函数 170
13.7 用偷懒的办法处理拷贝构造函数与赋值函数 172
13.8 如何在派生类中实现类的基本函数 172
第14章 C++ STL应用 175
14.1 STL介绍 176
14.2 容器类 176
14.3 迭代器 181
14.4 算法 183
第15章 其它编程经验 185
15.1.1 用const修饰函数的参数 186
15.1 使用const 提高函数的健壮性 186
15.1.2 用const修饰函数的返回值 187
15.1.3 const成员函数 188
15.2提高程序的效率 189
15.3 一些有益的建议 189
附录 A:C++/C 试题 191
附录 B:C++/C 试题的答案与评分标准 195
附录 C:C++/C 代码检查表 201
附录 D:大学十年 207
附录E:《大学十年》后记 231
参考文献 233