C++编程高质量培训.docx
《C++编程高质量培训.docx》由会员分享,可在线阅读,更多相关《C++编程高质量培训.docx(82页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 Back to man.ChinaU高质量C+/C编程指南文件状态草稿文件V 正式文件更改正式文件文件标识:当前版本:1.0作者:林锐博士完成日期:2001年7月24日版本历史版本/状态作者参与者起止日期备注V0.9 草稿文件林锐2001-7-1S2001-7-18林锐起草V 1.0正式文件林锐2001-7-18至 2001-7-24朱洪海审查V 0.9, 林锐修正草稿中的错误目录前言.第1章文件结构.1.1 版权和版本的声明1.2 头文件的结构.1.3 定义文件的结构.1.4 头文件的作用.1.5 目录结构.第2章程序的版式.2.1 空行.2.2 代码行2.3 代码行内的格.2.4 对齐.
2、2.5 长行拆分.2.6 修饰符的位置.2.7 注释.2.8 类的版式第3章命名规则.3.1 共性规则.3.2 简陋的WINDOWS成用程序命命规则.3.3 简单的UNIX应用程序命名规则第4章表达式和基本语句.4.1 运算符的优先级.4.2 复合表达式.4.3 IF 语句.4.4 循环语句的效率.4.5 FOR语句的循环捽制变量.4.6 SWITCH 语句.4.7 GOTO 语句.第5章常量.5.1 为什么需要常量.5.2 CONST 与 #DEFINE 的比较.5.3 常量定义规则5.4 类中的常量第6章函数设计.6.1 参数的规则6.2 返冋值的规则.6.3 函数内部实现的规则.6.4
3、丈它建议.6.5 使丿I断言.6.6 弓|用与指针的比较.第7章内存管理.7.1 内存分配方式.7.2 常见的内存错误及其对策.7.3 指针与数组的对比.7.4 指针参数是如何传递内存的?.7.5 FREE和DELETE把指针怎么啦?.7.6 动态内存会被门动稀放吗?.7.7 杜绝“野指针”.7.8 有了 MALLOC/FREE 为什么还要 NEW/DELETE? .7.9 内存耗尽怎么办?.7.10 MALLOC/FREE 的使用要点.7.11 NEW/DELETE 的使用要点.7.12 些心得体会第8章C+函数的高级特性.8.1 函数帀我的概念.8.2 成员函数的帀载、覆盖可隐藏.8.3
4、参数的缺省值.8.4 运算符重载.8.5 函数内联.8.6 一一心得体会.第9章类的构造函数、析构函数与赋值函数.9.1 构造函数与析构函数的起源.9.2 构造函数的初始化及.9.3 构造和析构的次序.9.4 示例:类STRING的构造函数析构函数.9.5 不要轻视拷贝构造函数赋值函数.9.6 示例:类STRING的拷贝构造函数赋值函数.9.7 偷懒的办法处理拷贝构造函数与赋值函数.9.8 如何在派生类屮实现类的供基函数.9.9 些心得体会.第10章类的继承与组合10.1 继承.10.2 组合.第11章其它编程经验11.1 使用CONST提高函数的健壮性.11.2 提高程序的效率.11.3 些
5、有益的建议.参考文献附录A: C+/C代码审査表.附录B: C+/C试题.附录C: C+/C试题的答案与评分标准.二、本书导读首先请做附录B的C+/C试题(不要看答案),考查自己的编程质量究竟如何。然后参照答案 严格打分。(1)如果你只得了儿十分,请不要声张,也不要太难过。编程质量差往往是由于不良习惯造 成的,与人的智力、能力没有多大关系,还是有药可救的。成绩越差,可以进步的空间就越 大,中国不就是在落后中赶超发达资本主义国家吗?只要你能下决心改掉不良的编程习惯, 第二次考试就能及格了。(2)如果你考及格了,表明你的技术基础不错,希望你能虚心学习、不断进步。如果你还没 有找到合适的工作単位,不
6、妨到上海贝尔试一试。(3)如果你考出85分以上的好成绩,你有义务和资格为你所在的团队作“C+/C编程”培训。 希望你能和我们多多交流、相互促进。半年前我曾经发现颗好苗子,就把他挖到我们小组 来。(4)如果你在没有任何提示的情况下考了满分,希望你能收我做你的徒弟。编程考试结束后,请阅读本书的正文。本书第一章至第六章主要论述C+/C编程风格。难度不高,但是细节比较多。别小看了,提 髙质量就是要从这些点点滴滴做起。世上不存在最好的编程风格,一切因需求而定。团队开 发讲究风格一致,如果制定了大家认可的编程风格,那么所有组员都要遵守。如果读者觉得 本书的编程风格比较合你的工作,那么就采用它,不要只看不做
7、。人在小时候说话发音不准, 写字潦草,如果不改正,总有后悔的时候。编程也是同样道理。第七章至第十一章是专题论述,技术难度比较高,看书时要积极思考。特别是第七章“内存 管理”,读了并不表示懂了,懂了并不表示就能正确使用。有一位同事看了第七章后觉得“野 指针”写得不错,与我切磋了一把。可是过了两周,他告诉我,他忙了两天追查出个Bug, 想不到又是“野指针”出问题,只好重读第七章。光看本书对提高编程质量是有限的,建议大家阅读本书的参考文献,那些都是经典名著。如果你的编程质量已经过关了,不要就此满足。如果你想成为优秀的软件开发人员,建议你 阅读并按照CMMI规范做事,让自己的综合水平上升一个台阶。上海
8、贝尔的员工可以向网络 应用事业部软件工程研究小组索取CMMI有关资料,最好能参加培训。三、版权声明本书的大部分内容取材于作者一年前的书籍手稿(尚未出版),现整理汇编成为上海贝尔网络 应用事业部的个规范化文件,同时作为培训教材。由于C+/C编程是众所周知的技术,没有秘密可言。编程的好经验应该大家共享,我们自己 也是这么学来的。作者愿意公开本书的电子文档。版权声明如下:(1)读者可以任意拷贝、修改本书的内容,但不可以篡改作者及所属单位。(2)未经作者许可,不得出版或大量印发本书。(3)如果竞争对手公司的员得到本书,请勿公开使用,以免发生纠纷。预计到2002年7月,我们将建立切合中国国情的CMMI
9、3级解决方案。届时,包括本书在内的 约1000页规范将严格受控。欢迎读者对本书提出批评建议。林锐,2001年7月對章文件结构每个C+/C程序通常分为两个文件。个文件用于保存程序的声明(declaration)称为 头文件。另个文件用于保存程序的实现(implementation),称为定义(definition)文件。C+/C程序的头文件以“.h”为后缀,C程序的定义文件以“.c”为后缀,C+程序的定 义文件通常以“.cpp”为后缀(也有一些系统以“.cc”或“.cxx”为后缀)。L!版权和版本的声明版权和版本的声明位于头文件和定义文件的开头(参见示例L1),主要内容有:(1)版权信息。(2)
10、文件名称,标识符,摘耍。(3)当前版本号,作者/修改者,完成日期。(4)版本历史信息。/* Copyright (c) 2001I上海贝尔有限公司网络应用事业部* All rights reserved.* 文件名称:filename, h 文件标识:见配置管理计划书 摘要:简要描述本文件的内容* 当前版本:1. 1 作者:输入作者(或修改者)名字 完成日期:2001年7月20日* 取代版本:1.0 原作者:输入原作者(或修改者)名字 完成日期:2001年5月10日示例1-1版权和版本的声明工义头文件的结构头文件由三部分内容组成:(1)头文件开头处的版权和版本声明(参见示例1-1)。(2)预处
11、理块。(3)函数和类结构声明等。假设头文件名称为graphics, h,头文件的结构参见示例1-2。【规则1-2-1】为了防止头文件被重复引用,应当用ifndet7define/endif结构产生预处理块。【规则1-2-2】用include filename.h格式来引用标准库的头文件(编译器将从标准库 目录开始搜索)。【规则1-2-3】用#includeFlename.h”格式来引用非标准库的头文件(编译器将从用户的 工作目录开始搜索)。令【建议1-2-1】头文件中只存放“声明”而不存放定义”在C+语法中,类的成员函数可以在声明的同时被定义,并且自动成为内联函数。这虽 然会带来书写上的方便,
12、但却造成了风格不一致,弊大于利。建议将成员函数的定义与声明 分开,不论该函数体有多么小。令【建议1-2-2】不提倡使用全局变量,尽量不要在头文件中出现象extern int value这类声明。版权和版本声明见示例1-1,此处省略。ttifndef GRAPHICS_H 防止 gr叩hics.h 被重复引用 ttdefine GRAPHICS_Hftinclude 引用标准库的头文件#include“myheader.h 引用非标准库的头文件void Functionl (,) ; / 全局函数声明class Box /Z类结构声明ttendif示例1-2 C+/C头文件的结构1宜定义文件的结
13、构定义文件有三部分内容:(1)定义文件开头处的版权和版本声明(参见示例1-1)。(2)对些头文件的引用。(3)程序的实现体(包括数据和代码)。假设定义文件的名称为graphics. cpp定义文件的结构参见示例13。/版权和版本声明见示例1-1,此处省略。#includegraphics.h 弓 I 用头文件/全局函数的实现体 void Functionl (,)/Z类成员函数的实现体 void Box:Draw()示例1-3 C卄/C定义文件的结构!头文件的作用早期的编程语言如Basic、Fortran没有头文件的概念,C+/C语言的初学者虽然会用使用 头文件,但常常不明其理。这里对头文件的
14、作用略作解释:(1)通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用 户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能,而不 必关心接口怎么实现的。编译器会从库中提取相应的代码。(2)头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声 明不一致,编译器就会指出错误,这简单的规则能大大减轻程序员调试、改错的负担。1天目录结构如果个软件的头文件数目比较多(如超过十个),通常应将头文件和定义文件分别保存 于不同的目录,以便于维护。例如可将头文件保存于include目录,将定义文件保存于source目录(可以是多级目录)。
15、 如果某些头文件是私有的,它不会被用户的程序直接引用,则没有必要公开其“声明”。 为了加强信息隐藏,这些私有的头文件可以和定义文件存放于同一个目录。翼章程序的版式版式虽然不会影响程序的功能,但会影响可读性。程序的版式追求清晰、美观,是程序风格 的重耍构成因素。可以把程序的版式比喻为“书法”。好的“书法”可让人对程序一目了然,看得兴致勃 勃。差的程序“书法”如螃蟹爬行,让人看得索然无味,更令维护者烦恼有加。请程序员们 学习程序的“书法”,弥补大学计算机教育的漏洞,实在很有必要。2.1 空行空行起着分隔程序段落的作用。空行得体(不过多也不过少)将使程序的布局更加清晰。 空行不会浪费内存,虽然打印含
16、有空行的程序是会多消耗些纸张,但是值得。所以不要舍 不得用空行。 【规则2-1-1在每个类声明之后、每个函数定义结朿之后都要加空行。参见示例2-1 (a) 【规则2-1-2在个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。参见示例2-1 (b)/Z空行void Functionl (,) (/Z空行void Function2 (,) ()/Z空行void Functions (,) (/空行while (condition) (statementl;/空行if (condition)(statement2;else(statement3;/空行statement4;)示例
17、2T(a)函数之间的空行示例2T(b)函数内部的空行四代码行 【规则2-2-1】一行代码只做一件事情,如只定义个变量,或只写一条语句。这样的代码 容易阅读,并且方便于写注释。 【规则2-2-2】 if、for、while, do等语句自占一行,执行语句不得紧跟其后。不论执行语 句有多少都要加。这样可以防止书写失误。示例2-2 (a)为风格良好的代码行,示例2-2 (b)为风格不良的代码行。int width; /Z 宽度 int height; /Z 髙度 int depth; / 深度int width, height, depth; / 宽度高度深度x = a + b;y = c + d;
18、 z = e + f;X = a + b; y = c + d; z = e + f;if (width height)dosomething ();)if (width =”、“/.“ + ”、“” “&” . “.等二 元操作符的前后应当加空格。【规贝236】一元操作符如!”、“”、. “-、“&”(地址运算符)等前后不加空格。【规则23】象“”、”“这类操作符前后不加空格。【建议231】对于表达式比较长的for语句和if语句,为了紧凑起见可以适当地去掉些 空格,如 for (i=0; i= 2000) 良好的风格 if (year =2000) / 不良的风格 if (a=b) & (c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 编程 质量 培训
限制150内