### 高质量C++编程指南知识点总结
#### 文件概述
《高质量C++编程指南》由林锐博士编写,是一份详细的编程规范文档,旨在指导软件工程师编写高质量的C++代码。该指南最初版本为1.0,完成于2001年7月24日。文档分为多个章节,涉及文件结构、程序版式、命名规则、表达式和基本语句、常量、函数设计、内存管理、C++函数的高级特性、类的构造函数、析构函数与赋值函数、类的继承与组合等内容。
#### 第1章 文件结构
- **版权和版本声明**:确保每一份源文件都包含版权和版本信息,以便追踪来源和版本变更。
- **头文件结构**:头文件应包括预处理器指令、全局变量声明、类型定义、函数原型等。
- **定义文件结构**:定义文件通常包含具体的实现代码,如函数体、类的实现等。
- **头文件的作用**:头文件用于声明,提供接口给其他文件使用。
- **目录结构**:合理规划项目文件夹结构,方便管理和维护。
#### 第2章 程序的版式
- **空行**:用于分隔不同的逻辑段落,增强代码可读性。
- **代码行**:每行代码不超过一定长度,建议使用80字符以内。
- **代码行内的空格**:在操作符前后添加适当的空格以增加可读性。
- **对齐**:保持相同层次的代码对齐,如大括号的对齐。
- **长行拆分**:过长的行需要拆分成多行,并注意缩进。
- **修饰符的位置**:如 public、protected 和 private 关键字的位置,通常放在类定义中相应的成员前面。
- **注释**:提供必要的注释来解释复杂的逻辑或算法,注释应简洁明了。
- **类的版式**:遵循一定的格式和风格,如成员变量和成员函数的组织顺序。
#### 第3章 命名规则
- **共性规则**:变量、函数等命名应遵循一定的约定,如使用下划线分隔单词。
- **简单的Windows应用程序命名规则**:如使用大写字母开头表示常量等。
- **简单的Unix应用程序命名规则**:通常采用小写字母开头,用下划线分隔单词。
#### 第4章 表达式和基本语句
- **运算符的优先级**:掌握运算符的优先级顺序,避免因误解导致的错误。
- **复合表达式**:合理使用复合表达式,提高代码的紧凑性和效率。
- **if语句**:if语句的使用规则,包括缩进和条件表达式的书写方式。
- **循环语句的效率**:考虑循环语句的性能优化,如减少不必要的计算。
- **for语句的循环控制变量**:循环控制变量的命名和初始化。
- **switch语句**:switch语句的使用技巧,如default分支的放置位置。
- **goto语句**:避免使用goto语句,除非非常必要,因为它的使用可能导致代码难以理解和维护。
#### 第5章 常量
- **为什么需要常量**:常量可以提高代码的可读性和可维护性。
- **const与#define的比较**:const关键字相比#define宏定义具有更多的优点,如类型安全。
- **常量定义规则**:如使用全大写字母和下划线来定义常量。
- **类中的常量**:类中常量的定义和使用方法。
#### 第6章 函数设计
- **参数的规则**:函数参数的设计原则,如参数数量、类型选择等。
- **返回值的规则**:函数返回值的设计考虑,如使用bool类型表示成功或失败。
- **函数内部实现的规则**:函数内部实现的注意事项,如异常处理。
- **使用断言**:在适当的地方使用断言来验证函数的前提条件。
- **引用与指针的比较**:理解引用和指针的区别,根据实际情况选择使用。
#### 第7章 内存管理
- **内存分配方式**:了解不同的内存分配机制,如栈和堆。
- **常见的内存错误及其对策**:识别并解决内存泄漏等问题。
- **指针与数组的对比**:指针和数组在内存管理方面的差异。
- **指针参数是如何传递内存的**:理解指针作为函数参数时的数据传递机制。
- **free和delete把指针怎么啦**:free和delete函数的作用和区别。
- **动态内存会被自动释放吗**:手动管理动态分配的内存,防止内存泄漏。
- **杜绝“野指针”**:避免使用已释放的内存地址。
- **有了malloc/free为什么还要new/delete**:C++中new/delete提供了类型安全和异常处理支持。
- **内存耗尽怎么办**:当内存不足时的应对策略。
- **malloc/free的使用要点**:使用malloc/free时的注意事项。
- **new/delete的使用要点**:使用new/delete时的最佳实践。
- **一些心得体会**:关于内存管理的经验分享。
#### 第8章 C++函数的高级特性
- **函数重载的概念**:函数重载允许使用相同名称但不同参数列表的函数。
- **成员函数的重载、覆盖与隐藏**:了解这些概念的区别及应用场合。
- **参数的缺省值**:为函数参数设置缺省值的规则。
- **运算符重载**:运算符重载的使用方法和限制。
- **函数内联**:内联函数的定义和使用,以及其性能优势。
- **一些心得体会**:关于函数高级特性的实用技巧和经验总结。
#### 第9章 类的构造函数、析构函数与赋值函数
- **构造函数与析构函数的起源**:介绍构造函数和析构函数的历史背景。
- **构造函数的初始化表**:构造函数初始化列表的使用。
- **构造和析构的次序**:构造和析构函数调用的顺序问题。
- **示例:类String的构造函数与析构函数**:具体例子展示构造和析构过程。
- **不要轻视拷贝构造函数与赋值函数**:强调拷贝构造函数和赋值函数的重要性。
- **示例:类String的拷贝构造函数与赋值函数**:通过实例讲解拷贝构造函数和赋值函数的实现。
- **偷懒的办法处理拷贝构造函数与赋值函数**:简化的拷贝构造函数和赋值函数实现方法。
- **如何在派生类中实现类的基本函数**:在派生类中重写基类函数的方法。
- **一些心得体会**:关于构造函数和析构函数的实用经验和技巧。
#### 第10章 类的继承与组合
- **继承**:类继承的基础概念及其优缺点。
- **组合**:使用组合而非继承的原则和方法。
#### 第11章 其它编程经验
- **使用const提高函数的健壮性**:const关键字的使用技巧。
- **提高程序的效率**:编写高效代码的一些建议。
- **一些有益的建议**:编程过程中值得遵循的其他建议。
#### 参考文献
- **附录A:C++/C代码审查表**:代码审查的具体标准和检查项。
- **附录B:C++/C试题**:用于测试编程能力的题目。
- **附录C:C++/C试题的答案与评分标准**:题目答案和评分指南。
通过以上知识点的梳理,可以看出《高质量C++编程指南》不仅涵盖了C++编程的基本概念和技术细节,还提供了大量的实践经验和技术建议,对于想要提高C++编程水平的开发者来说,是一份非常宝贵的学习资料。