### 高质量C++(C)编程指南——林锐博士著
#### 1. 文件结构与版本控制
《高质量C++/C编程指南》由林锐博士撰写,旨在为C++程序员提供一套实用且规范化的编程指导原则。该指南不仅强调了编写高质量代码的重要性,还详细介绍了如何组织文件结构以及如何进行版本控制。
- **文件标识**:明确指出当前文档的版本为1.0,确保读者知道这是最新的正式版本。
- **作者**:指明文档的作者为林锐博士,这有助于追溯文档的来源及权威性。
- **文件状态**:通过标记表明文档处于正式文件状态,而非草稿或待修改状态,保证了文档的有效性和可靠性。
- **完成日期**:文档的完成日期为2001年7月24日,有助于读者了解文档内容的新鲜度。
- **版本历史**:记录了文档的不同版本及其变化,包括从草稿到正式版本的过程,这有利于追踪文档的发展历程和改进之处。
#### 2. 程序的版式
程序的版式对于代码的可读性和可维护性至关重要。林锐博士在此章节中详细阐述了如何通过适当的版式来提升代码质量:
- **空行**:适当使用空行可以帮助划分不同的逻辑段落,提高代码的可读性。
- **代码行**:每行代码应保持合理的长度,避免过长的行使得代码难以阅读。
- **代码行内的空格**:合理使用空格可以在操作符之间和关键字前后添加间隔,增强代码的可读性。
- **对齐**:通过对齐可以清晰地表示逻辑关系,例如if-else结构中的条件分支。
- **长行拆分**:当一行代码过长时,应该拆分为多行以增强可读性。
- **修饰符的位置**:合理放置修饰符,如const或static,以确保代码结构清晰。
- **注释**:通过有效的注释来解释代码的目的和工作原理,提高代码的可维护性。
- **类的版式**:类的结构和布局应该遵循一定的规范,以便于理解类的职责和功能。
#### 3. 命名规则
良好的命名习惯对于编写可读性强的代码至关重要。林锐博士在这部分提出了几个重要的命名规则:
- **共性规则**:提供了通用的命名约定,如使用下划线分隔单词等。
- **简单的WINDOWS应用程序命名规则**:针对Windows平台的应用程序,给出了具体的命名建议。
- **简单的UNIX应用程序命名规则**:对于Unix平台,同样提供了特定的命名指导。
#### 4. 表达式和基本语句
这一部分着重介绍了如何正确使用各种基本语句和表达式:
- **运算符的优先级**:了解运算符的优先级可以帮助程序员写出更准确的表达式。
- **复合表达式**:介绍如何合理构建复合表达式,以提高代码效率。
- **IF语句**:讨论了如何有效地使用条件语句来控制程序流程。
- **循环语句的效率**:分析不同类型的循环语句的性能差异,帮助程序员选择最优方案。
- **FOR语句的循环控制变量**:探讨了循环控制变量的最佳实践。
- **SWITCH语句**:讲解了如何利用switch语句来简化复杂的条件判断。
- **GOTO语句**:虽然一般不推荐使用goto语句,但这里还是提到了它的使用场景。
#### 5. 常量
常量在程序设计中扮演着重要角色。本章节探讨了常量的使用方法:
- **为什么需要常量**:解释了使用常量的好处,比如提高代码的可维护性和可读性。
- **CONST与#DEFINE的比较**:对比了两种定义常量的方式,指出各自的优缺点。
- **常量定义规则**:给出了定义常量时应遵循的一些规则。
- **类中的常量**:特别提到了在类中如何定义和使用常量。
#### 6. 函数设计
函数是程序的基本构建块之一,其设计的质量直接影响着整个程序的性能和可维护性:
- **参数的规则**:指导如何设计函数参数,包括类型的选择、默认值的设置等。
- **返回值的规则**:讨论了如何确定函数的返回值类型以及何时使用异常处理。
- **函数内部实现的规则**:提出了编写函数体时应注意的一些事项,如代码复用、模块化等。
- **其它建议**:提供了一些额外的设计建议,帮助程序员写出更加优雅的函数。
- **使用断言**:介绍了如何利用断言来检测程序运行时的状态,确保程序的正确性。
- **引用与指针的比较**:比较了引用和指针的特点及使用场景,帮助程序员做出合适的选择。
#### 7. 内存管理
内存管理是C++编程中的一个关键领域。这部分内容涵盖了如何高效地管理内存资源:
- **内存分配方式**:讨论了不同的内存分配机制,包括栈内存和堆内存。
- **常见的内存错误及其对策**:列举了一些常见的内存问题,如内存泄漏、野指针等,并提出了解决方案。
- **指针与数组的对比**:分析了指针和数组之间的异同,帮助程序员更好地理解它们的用法。
- **指针参数是如何传递内存的**:解释了通过指针传递数据的具体机制。
- **FREE和DELETE把指针怎么啦**:澄清了free和delete操作对指针的影响。
- **动态内存会被自动释放吗**:解答了关于动态内存释放的常见疑问。
- **杜绝“野指针”**:提供了预防野指针产生的策略。
- **有了MALLOC/FREE为什么还要NEW/DELETE**:解释了malloc/free与new/delete的区别。
- **内存耗尽怎么办**:当遇到内存耗尽的情况时,提供了一些建议。
- **MALLOC/FREE的使用要点**:总结了使用malloc/free时应注意的关键点。
- **NEW/DELETE的使用要点**:列出了使用new/delete时应遵循的一些准则。
- **一些心得体会**:分享了作者在内存管理方面的实践经验。
#### 8. C++函数的高级特性
这部分深入探讨了C++中一些高级特性,如函数重载、成员函数重载、运算符重载等:
- **函数重载的概念**:解释了函数重载的基本概念和使用场景。
- **成员函数的重载、覆盖与隐藏**:区分了成员函数的重载、覆盖和隐藏之间的区别。
- **参数的缺省值**:介绍了如何为函数参数设置缺省值。
- **运算符重载**:探讨了运算符重载的技术细节和最佳实践。
- **函数内联**:分析了内联函数的优势和潜在问题。
- **一些心得体会**:分享了作者关于C++函数高级特性的使用心得。
#### 9. 类的构造函数、析构函数与赋值函数
构造函数、析构函数和赋值函数是类的重要组成部分。本章节重点讲解了这些函数的设计和使用:
- **构造函数与析构函数的起源**:回顾了构造函数和析构函数的由来。
- **构造函数的初始化表**:讨论了构造函数初始化列表的使用方法。
- **构造和析构的次序**:解析了对象构造和析构时发生的顺序。
- **示例:类STRING的构造函数与析构函数**:通过具体例子展示了如何设计类的构造和析构函数。
- **不要轻视拷贝构造函数与赋值函数**:强调了拷贝构造函数和赋值函数的重要性。
- **示例:类STRING的拷贝构造函数与赋值函数**:通过实例说明了如何编写拷贝构造函数和赋值函数。
- **偷懒的办法处理拷贝构造函数与赋值函数**:提供了一些简化拷贝构造函数和赋值函数编写的技巧。
- **如何在派生类中实现类的基本函数**:介绍了在派生类中如何重写基类的构造、析构等函数。
- **一些心得体会**:分享了作者在类的构造、析构等方面的经验教训。
#### 10. 类的继承与组合
继承和组合是面向对象编程中的两个核心概念。这部分内容讨论了如何正确使用这两种机制:
- **继承**:介绍了继承的基本概念和应用场景。
- **组合**:探讨了组合的设计模式及其优势。
#### 11. 其它编程经验
这部分汇集了作者在实际编程过程中积累的各种经验和建议:
- **使用CONST提高函数的健壮性**:通过使用const关键字来提高函数的安全性和健壮性。
- **提高程序的效率**:提供了一些提高程序执行效率的方法和技巧。
- **一些有益的建议**:总结了一些有助于提高编程技能的实用建议。
#### 结论
《高质量C++/C编程指南》是一部系统而全面的C++编程指南,它不仅涵盖了从基础语法到高级技术的广泛内容,还提供了大量实用的编程建议。通过学习这本书,读者不仅能学到编写高质量代码的方法,还能了解到如何通过优秀的编程实践来提高自己的编程水平。