当前位置:首页 > 工业技术
高质量程序设计指南 C++/C语言  第2版
高质量程序设计指南 C++/C语言  第2版

高质量程序设计指南 C++/C语言 第2版PDF电子书下载

工业技术

  • 电子书积分:15 积分如何计算积分?
  • 作 者:林锐,韩永泉编著
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2003
  • ISBN:750538628X
  • 页数:456 页
图书介绍:高质量程序设计是软件行业的薄弱环节,大部分企业只能依靠大量地测试和改错来提高软件产品的质量,为此付出了高昂的代价。因此,如何让程序员熟练地掌握编程技术和编程规范,在开发过程中内建高质量,是IT企业面临的主要挑战之一。本书作者以轻松幽默的笔调向读者论述了高质量软件开发方法与C++/C编程规范,令人耳目一新。它是作者多年从事软件开发工作的经验总结。书中大量的“提示、建议、规则”具有很好的实用价值。本书第一版的电子文档曾经在Internet上广泛流传,被国内IT企业的不少软件开发人员采用。本书第二版比第一版的内容增加了一倍,并且论述更加细致和深入,可以认为是全新之作。本书的附录C《大学十年》是作者在网上发表的一个短篇传记,文中所描述的充满激情的学习生活态度,感染了大批莘莘学子。
上一篇:Unix入门经典下一篇:家有佳法
《高质量程序设计指南 C++/C语言 第2版》目录

第1章 高质量软件开发之道 1

目录 1

1.1 软件质量基本概念 2

1.1.1 如何理解软件的质量 2

1.1.2 提高软件质量的基本方法 4

1.1.3 “零缺陷”理念 5

1.2.1 正确性 6

1.2.2 健壮性 6

1.2 细说软件质量属性 6

1.2.3 靠性 7

1.2.4 性能 8

1.2.5 易用性 9

1.2.6 清晰性 9

1.2.7 安全性 10

1.2.8 可扩展性 10

1.2.9 兼容性 10

1.3 人们关注的不仅仅是质量 11

1.3.1 质量、生产率和成本之间的关系 11

1.2.10 可移植性 11

1.3.2 软件过程改进基本概念 14

1.4 高质量软件开发的基本方法 16

1.4.1 建立软件过程规范 16

1.4.2 复用 19

1.4.3 分而治之 21

1.4.4 优化与折中 21

1.4.5 技术评审 22

1.4.6 测试 25

1.4.7 质量保证 27

1.4.8 改错 28

1.5 关于软件开发的一些常识和思考 30

1.5.1 有最好的编程语言吗 30

1.5.2 编程是一门艺术吗 30

1.5.3 编程时应该多使用技巧吗 31

1.5.4 换更快的计算机还是换更快的算法 31

1.5.5 错误是否应该分等级 31

1.5.6 一些错误的观念 32

1.6 小结 33

第2章 做好程序员 35

2.1 漫谈程序员 36

2.2 职业道德 37

2.2.1 上班时间不干与工作无关的事情 38

2.2.2 不损害集体利益 39

2.2.3 不干危害社会的事情 39

2.3 工作态度 40

2.3.1 认真负责 40

2.3.2 服务意识 41

2.4.1 合理安排一天的时间 42

2.4 高效率地工作 42

2.4.2 减少路上花费的时间 44

2.4.3 开会 45

2.4.4 处理电子邮件 45

2.4.5 随时记录 46

2.5 程序员佩服什么样的项目经理 46

2.5.1 丰富的产品开发经验和比较高的技术水平 47

2.5.2 懂得管事和管人 47

2.5.3 较好的人格魅力 48

2.6 将程序员培养成为经理 49

2.7 程序员升为项目经理后是否还要编程 50

2.8 学无止境 54

2.8.1 不断学习新技术 54

2.8.2 提高综合才能 55

2.8.3 向错误和失败学习 57

2.9 小结 59

第3章 编程语言发展简史 61

3.1 编程语言大事记 62

3.2 Ada的故事 66

3.3 C/C++发展简史 67

3.4 Borland与Microsoft之争 69

3.5 Java阵营与Microsoft的较量 70

3.6 小结 73

第4章 程序的基本概念 75

4.1 程序设计语言 76

4.2 语言实现 77

4.3 开发环境 78

4.4 程序的工作原理 79

第5章 C++/C程序设计入门 81

5.1.1 不可缺少的函数main() 82

5.1.2 main()的命令行参数和返回值 82

5.1 C++/C程序的基本概念 82

5.1.3 内部名称 85

5.1.4 声明、定义和语句 86

5.1.5 变量及其初始化 88

5.1.6 C Runtime Library 88

5.1.7 编译时和运行时的不同 89

5.1.8 编译单元和分离编译技术 90

5.2 基本数据类型和内存映像 91

5.3.1 隐式转换 92

5.3 类型转换 92

5.3.2 强制转换 94

5.4 标识符 96

5.5 转义序列 97

5.6 运算符 98

5.7 表达式 100

5.8 基本控制结构 102

5.9 选择(判断)结构 103

5.9.1 布尔变量与零值比较 103

5.9.3 浮点变量与零值比较 104

5.9.2 整型变量与零值比较 104

5.9.4 指针变量与零值比较 105

5.9.5 对if语句的补充说明 105

5.9.6 switch结构 106

5.10 循环(重复)结构 108

5.10.1 for语句的循环控制变量 109

5.10.2 循环语句的效率 110

5.11 结构化程序设计原理 112

5.12 goto/continue/break语句 112

5.13 示例 113

第6章 C++/C常量 121

6.1 认识常量 122

6.1.1 字面常量 122

6.1.2 符号常量 122

6.1.3 契约性常量 124

6.1.4 枚举常量 124

6.2 使用符号常量 125

6.3 const与#define的比较 126

6.4 类中的常量 126

第7章 C++/C函数设计基础 129

7.2 函数原型和定义 130

7.1 认识函数 130

7.3 函数调用方式 132

7.4 认识函数堆栈 134

7.5 参数传递规则 137

7.6 返回值的规则 139

7.7 函数内部实现的规则 142

7.8 存储类型及作用域规则 144

7.8.1 存储类型 145

7.8.2 作用域规则 146

7.8.3 连接类型 147

7.9 递归函数 149

7.10 使用断言 153

7.11 使用const提高函数的健壮性 156

7.11.1 用const修饰函数的参数 156

7.11.2 用const修饰函数的返回值 157

第8章 C++/C指针、数组和字符串 159

8.1 指针 160

8.1.1 指针的本质 160

8.1.2 指针的类型及其支持的运算 162

8.1.3 指针传递 164

8.2.1 数组的本质 166

8.2 数组 166

8.2.2 二维数组 169

8.2.3 数组传递 170

8.3 字符数组、字符指针和字符串 172

8.3.1 字符数组、字符串和“”的迷思 172

8.3.2 字符指针的误区 173

8.3.3 字符串复制和比较 174

8.4 数指针 174

8.5 引用和指针的比较 177

第9章 C++/C高级数据类型 181

9.1 结构(Struct) 182

91.1 关键字struct与class的困惑 182

9.1.2 使用struct 183

9.1.3 位域 187

9.2 联合(Union) 189

9.3 枚举(Enum) 193

9.4 文件 194

第10章 C++/C编译预处理 197

10.2 宏定义 198

10.1 文件包含 198

10.3.1 #if、#elif和#else 201

10.3 条件编译 201

10.3.2 #ifdef和#ifndef 202

10.4 #error 203

10.5 #pragma 203

10.6 #和##运算符 204

10.7 预定义符号常量 205

第11章 C++/C文件结构和程序版式 207

11.1 程序文件的目录结构 208

11.2.1 头文件的用途和结构 209

11.2 文件的结构 209

11.2.2 版权和版本信息 210

11.2.3 源文件结构 211

11.3 代码的版式 211

11.3.1 适当的空行 211

11.3.2 代码行及行内空格 212

11.3.3 长行拆分 214

11.3.4 对齐与缩进 215

11.3.6 注释风格 216

11.3.5 修饰符的位置 216

11.3.7 ADT/UDT版式 218

第12章 C++/C应用程序命名规则 221

12.1 共性规则 222

12.2 简单的Windows应用程序命名规则 223

第13章 C++/C面向对象程序设计方法概述 227

13.1 漫谈面向对象 228

13.2 对象的概念 229

13.3 信息隐藏与类的封装 230

13.4 类的继承特性 231

13.5 类的组合特性 233

13.6 动态特性 236

13.6.1 虚函数 236

13.6.2 抽象基类 237

13.6.3 动态决议 240

13.6.4 多态 242

13.7 C++对象模型 243

13.7.1 对象的内存映像 243

13.7.2 隐含成员和填补字节 247

13.7.3 C++编译器如何处理成员函数 248

13.7.4 C++编译器如何处理静态成员 249

13.8 小结 250

第14章 类的构造、析构与赋值函数 251

14.1 构造函数与析构函数的起源 252

14.2 为什么需要构造函数 253

14.3 构造函数的成员初始化列表 255

14.4 对象的构造和析构次序 258

14.5 构造函数和析构函数的调用时机 259

14.6 构造函数和赋值函数的重载 261

14.7 示例:类String的构造函数和析构函数 262

14.8 何时应该定义拷贝构造函数和拷贝赋值函数 263

14.9 示例:类String的拷贝构造函数和拷贝赋值函数 264

14.10 用偷懒的办法处理拷贝构造函数和拷贝赋值函数 267

14.11 如何实现派生类的基本函数 267

第15章 C++函数的高级特性 271

15.1.1 重载的起源 272

15.1.2 重载是如何实现的 272

15.1 函数重载的概念 272

15.1.3 当心隐式类型转换导致重载函数产生二义性 275

15.2 成员函数的重载、覆盖与隐藏 276

15.2.1 重载与覆盖 276

15.2.2 令人迷惑的隐藏规则 277

15.2.3 摆脱隐藏 279

15.3 参数的默认值 280

15.4 运算符重载 282

15.4.1 基本概念 282

15.4.2 运算符重载的特殊性 283

15.4.3 不能重载的运算符 284

15.4.4 重载++和-- 284

15.5 函数内联 287

15.5.1 用函数内联取代宏 287

15.5.2 内联函数的编程风格 288

15.5.3 慎用内联 289

15.6 类型转换函数 290

15.7 const成员函数 293

第16章 C++异常处理和RTTI 297

16.1 为什么要使用异常处理 298

16.2.1 异常处理的原理 299

16.2 C++异常处理 299

16.2.2 异常类型和异常对象 301

16.2.3 异常处理的语法结构 302

16.2.4 异常的类型匹配规则 304

16.2.5 异常说明及其冲突 305

16.2.6 当异常抛出时局部对象如何释放 306

16.2.7 对象构造和析构期间的异常 306

16.2.8 如何使用好异常处理技术 308

16.3 虚函数面临的难题 312

16.2.9 C++的标准异常 312

16.4 RTTI及其构成 315

16.4.1 起源 315

16.4.2 typeid运算符 316

16.4.3 dynamic cast<>运算符 318

16.4.4 RTTI的魅力与代价 321

第17章 C++名字空间和模板 323

17.1 名字空间 324

17.1.1 为什么要使用名字空间 324

17.1.2 名字空间的特性 325

17.1.3 如何使用名字空间 328

17.2 模板技术 331

17.2.1 基本概念 331

17.2.2 类模板 332

17.2.3 模板参数 335

17.2.4 函数模板 338

17.2.5 模板实例化 342

17.2.6 模板特化 344

第18章 内存管理 347

18.2 常见的内存错误及其对策 348

18.1 内存分配方式 348

18.3 指针参数是如何传递内存的 350

18.4 free和delete把指针怎么啦 353

18.5 动态内存会被自动释放吗 354

18.6 杜绝“野指针” 354

18.7 有了malloc/free为什么还要new/delete 356

18.8 malloc/free的使用要点 358

18.9 new有3种使用方式 359

18.9.1 plain new 359

18.9.3 placement new/delete 360

18.9.2 nothrow new 360

18.10 new/delete的使用要点 364

18.11 内存耗尽怎么办 365

18.12 用对象模拟指针 367

18.13 泛型指针 370

第19章 学习和使用STL 373

19.1 STL简介 374

19.2 STL头文件的分布 375

19.2.1 容器类 375

19.2.4 数学运算库 376

19.2.2 泛型算法 376

19.2.3 迭代器 376

19.2.5 通用工具 377

19.2.6 其他头文件 377

19.3 容器设计原理 377

19.3.1 内存映像 377

19.3.2 存储方式和访问方式 379

19.3.3 顺序容器和关联式容器的比较 380

19.3.4 如何遍历容器 383

19.3.5 存储空间重分配问题 384

19.3.6 什么样的对象才能作为STL容器的元素 385

19.4 迭代器 388

19.4.1 迭代器的本质 388

19.4.2 迭代器失效及其危险性 392

19.5 存储分配器 394

19.6 适配器 394

19.7 泛型算法 398

19.8 一些特殊的容器 403

19.8.1 string类 403

19.8.2 bitset并非set 404

19.8.3 节省存储空间的vector〈bool〉 406

19.8.4 空容器 408

19.9 STL容器特征总结 410

19.10 STL使用心得 414

附录A C++/C试题 415

附录B C++/C试题的答案与评分标准 419

附录C 大学十年 425

附录D 《大学十年》后记 447

附录E 术语与缩写解释 449

参考文献 451

相关图书
作者其它书籍
返回顶部