c++程序员的注意事项

上传人:恋** 文档编号:120720421 上传时间:2020-02-09 格式:DOC 页数:12 大小:41.50KB
返回 下载 相关 举报
c++程序员的注意事项_第1页
第1页 / 共12页
c++程序员的注意事项_第2页
第2页 / 共12页
c++程序员的注意事项_第3页
第3页 / 共12页
c++程序员的注意事项_第4页
第4页 / 共12页
c++程序员的注意事项_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《c++程序员的注意事项》由会员分享,可在线阅读,更多相关《c++程序员的注意事项(12页珍藏版)》请在金锄头文库上搜索。

1、C+程序员的注意事项第1章 致读者1 在编写程序时,你是在为你针对某个问题的解决方案中的思想建立起一种具体表示.让程序的结构尽可能地直接反映这些思想: a 如果你能把“它”看成一个独立的概念,就把它做成一个类. b 如果你能把“它”看成一个独立地实体,就把它做成某个类的一个对象. c 如果两个类有共同的界面,将此界面做成一个抽象类. d 如果两个类的实现有某些显著的共同东西,静这些共性做成一个基类. e 如果一个类是一种对象的容器,将它做成一个模板. f 如果一个函数实现对某容器的一个算法,将它实现为对一族容器可用的模板函数. g 如果一组类、模板等互相之间有逻辑关系,将它们放进一个名字空间力

2、.2 在你定义一个并不是实现某个像矩阵或复数这样的数学对象的类时,或者定义一个低层地类型如链接表的时候: a 不要使用全局数据(使用成员). b 不要使用全局函数. c 不要使用公用数据成员. d 不要使用友元,除非为了避免a或c. e 不要在一个类里面放“类型域”;采用虚函数. f 不要使用在线函数,除非座位效果显著的优化.第2章 C+概览1 不用害怕,一切都会随着时间的推移而逐渐明朗起来.2 你并不需要在知道了C+地所有细节之后才能写出好的C+程序.3 请特别关注程序设计技术,而不是各种语言特征.第3章 标准库概念1 不要像重新发明车轮那样企图做每件事;去使用库.2 不要相信奇迹;要理解你

3、的库能做什么,它们如何做,它们做时需要多大代价.3 当你遇到一个选择时,应该优先选择标准库而不是其他的库.4 不要认为标准库对于任何事情都是最理想的.5 切记#include你所用到的功能的头文件.6 记住,标准库的功能定义在名字空间std中.7 请用string,而不是char*.8 如果怀疑,就用一个检查区间范围的向量.9 vector、list和map都比T好.10 如果要向一个容器中添加一个元素,用push_back()或back_insert().11 采用对vector的push_back(),而不是realloc().12 在main()中捕捉公共的异常.第4章 类型和声明1 保

4、持较小的作用域.2 不要在一个作用域和它外围的作用域里采用同样的名字.3 在一个声明中(只)声明一个名字.4 让常用的和局部的名字比较短,让不常用的和全局的名字比较长.5 避免看起来类似的名字.6 维持某种统一的命名风格.7 仔细选择名字,反映其意义而不是反映实现方式.8 如果所用的内部类型表示某种可能变化的值,请用typdef为它定义一个有意义的名字.9 用typedef为类型定义同义词,用枚举或类去定义新类型.10 切记每个声明中都必须描述一个类型(没有隐式的int).11 避免有关字符值的不必要的假设.12 避免有关整数大小的不必要假设.13 避免有关浮点类型表示范围的不必要假设.14

5、优先使用普通的int而不是short int或者long int.15 优先使用double而不是float或者long double.16 优先使用普通的char而不是signed char或者unsigned char.17 避免做出有关对象大小的不必要假设.18 避免无符号算术.19 应该带着疑问去看待从signed到unsigned,或者从unsigned到singed的转换.20 应该带着疑问去看待从浮点到整数的转换. 21 应该带着疑问其看待向较小类型的转换,如将int转换到char.第5章 指针、数组和结构1 避免非平凡的指针算术.2 当心,不要超出函数的界限去写.3 尽量使用0

6、而不是NULL.4 尽量使用vector和valarrray而不是内部(C风格)的数组.5 尽量使用string而不是以0结尾的char数组.6 尽量少使用普通的引用参数.7 避免void*,除了在某些低级代理.8 避免在代码中使用非平凡的文字量(“神秘的数”).相反,应该定义和使用各种符号常量.第6章 表达式和语句1 应尽量可能使用标准库,而不是其他的库和“手工打造的代码”.2 避免过于复杂的表达式.3 如果对运算符的优先级有疑问,加括号.4 避免显式类型转换.5 若必须做显式类型转换,提倡使用特殊强制运算符,而不是C风格的强制.6 只对定义良好的构造使用T(e)记法.7 避免带有无定义求值

7、顺序的表达式.8 避免goto.9 避免do语句.10 在你已经有了去初始化某个变量的值之前,不要去声明它.11 式注释简洁、清晰、有意义.12 保持一致的缩进编排风格.13 倾向于去定义一个成员函数operator new()去取代全局的operator new().14 在读输入的时候,总应考虑病态形式的输入.第7章 函数1 质疑那些非const的引用参数;如果你想要一个函数去修改其参数,请使用指针或者返回值.2 当你需要尽可能减少参数复制时,应该使用const引用参数.3 广泛而一致地使用const.4 避免宏.5 避免不确定数目的参数.6 不要返回局部变量的指针或者引用.7 当一些函数

8、对不同的类型执行概念上相同的工作时,请使用重载.8 在各种整数上重载时,通过提供函数去消除常见的歧义性.9 在考虑使用指向函数的指针时,请考虑虚函数或模板是不是更好的选择.10 如果你必须使用宏,请使用带有许多大写字母的丑陋的名字.第8章 名字空间和异常1 用名字空间表示逻辑结构.2 将每个非局部的名字放入某个名字空间里,除了main()之外.3 名字空间的设计应该让你能很方便地使用它,而又不会意外地访问了其他的无关名字空间.4 避免对名字空间使用很短的名字.5 如果需要,通过名字空间别名去缓和和长名字空间的影响.6 避免给你的名字空间的用户添加太大的记法负担.7 在定义名字空间的成员时使用n

9、amespace:member的形式.8 只在转换时,或者在局部作用域里,才用using namespace.9 利用异常去松弛“错误”处理代码和正常处理代码之间的联系.10 采用用户定义类型作为异常,不用内部类型.11 当局部控制结构足以应付问题,不要使用异常.第9章 源文件和程序1 利用头文件去表示界面和强调逻辑结构.2 用#include将头文件包含到实现有关功能的源文件里.3 不要在不同编译单位里定义具有同样名字,意义类似但又不同的全局变量.4 避免在头文件里定义非inline函数.5 只在全局作用域或名字空间里使用#include.6 只用#include包含完整的定义.7 使用包含

10、保护符.8 用#include将C头文件包含到名字空间里,以避免全局名字.9 将头文件做成自给自足的.10 区分用户界面和实现界面.11 区分一般用户界面和专家用户界面.12 在有意向用于非C+程序组成部分的代码中,应避免需要运行时初始化的非局部对象.第10章 类1 用类表示概念.2 只将public数据(struct)用在它实际杀过那仅仅时数据,而且对于这些数据成员并不存在不变式的地方.3 一个具体类型属于最简单的类.如果有用的话,就应该尽可能使用具体类型,而不要采用更复杂的阿里,也不要用简单的数据结构.4 只将那些需要直接访问类的表示的函数作为成员函数.5 采用名字空间,使类与其协助函数之

11、间的关系更明确.6 将那些不修改对象值的成员函数做成const成员函数.7 将那些需要访问类的表示,但无须针对特定对象调用的成员函数做成static成员函数.8 通过构造函数建立起类的不变式.9 如果构造函数申请某种资源,析构函数就应该释放一资源.10 如果在一个类里有指针成员,它就要有复制操作(包括复制构造函数和复制赋值).11 如果在一个类里有引用成员,它就可能需要有复制操作(包括复制构造函数和复制赋值).12 如果一个类需要复制操作或析构函数,它多半还需要有构造函数、析构函数、复制赋值函数和复制构造函数.13 在复制赋值函数里需要检查自我赋值.14 在写复制构造函数时,请小心地复制每个需

12、要复制的元素(当心默认的初始式).15 在向某个类中添加新成员函数时,一定要仔细检查,看是否存在需要更新的用户定义构造函数,以使它能够初始化新成员.16 在类声明中需要定义整型常量时,请使用枚举.17 在构造全局的和名字空间的对象时,应避免顺序依赖性.18 用第一次开关去缓和顺序依赖性问题.19 请记住,临时对象将在建立它们的那个完整表达式结束时销毁.第11章 运算符重载1 定义运算符主要是为了模仿习惯使用方式.2 对于大型运算对象,请使用const引用参数类型.3 对于大型的结果,请考虑优化返回方式.4 如果默认复制操作对一个类和合适,最好是直接用它.5 如果默认复制操作对一个类不和合适,重

13、新定义它,或者禁止它.6 对于需要访问表示的操作,优先考虑作为成员函数而不是作为非成员函数.7 对于不访问表示的操作,优先考虑作为非成员函数而不是作为成员函数.8 用名字空间将协助函数与“它们的”类关联起来.9 对于对称的运算符采用非成员函数.10 用()作为多维数组的下标.11 将只有一个“大小参数”的构造函数做成explicit.12 对于非特殊的使用,最好是用标准string而不是你自己的练习.13 要注意引进隐式转换的问题.14 用成员函数表达那些需要左值作为其左运算对象的运算符.第12章 派生类1 避免类型域.2 用指针和引用避免切割问题.3 用抽象类将设计的中心集中到提供清晰的界面

14、方面.4 用抽象类是界面最小化.5 用抽象类从界面中排除实现细节.6 用虚函数是新的实现能够添加进来,又不会影响用户代码.7 用抽象类去尽可能减少用户代码的重新编译.8 用抽象类是不同的实现能够共存.9 一个有虚函数的类应该有一个虚析构函数.10 抽象类通常不需要构造函数.11 让不同概念的表示也不同.第13章 模板1 用模板描述需要使用到许多参数类型上去的算法.2 用模板表述容器.3 为指针的容器提供专门化,以减小代码规模.4 总是在专门化之前声明模板的一般形式.5 在专门化的使用之前先声明它.6 尽量减少模板定义对于实例化环境的依赖性.7 定义你所声明的每一个专门化.8 考虑一个模板是否需要有针对C风格字符串和数组的专门化.9 用表述策略的对象进行参数化.10 用专门化和重载为同一概念的针对不同类型的实现提供统一界面

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 试题/考题 > 高中试题/考题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号