摘要: 附录A :C++/C代码审查表文件结构重要性审查项结论头文件和定义文件的名称是否合理?头文件和定义文件的目录结构是否合理?版权和版本声明是否完整?重要头文件是否使用了 ifndef/define/endif 预处理块?头文件中是否只存放“声明”而不存放“定义”……程序的版式重要性审查项结论空行是否得体?代码行内的空格是否得体?长行拆分是否得体?“{” 和 “}” 是否各占一行并且对齐于同一列?重要一行代码是否只做一件事?如只定义一个变量,只写一条语句。重要If、for、while、do等语句自占一行,不论执行语句多少都要加“{}”。重要在定义变量(或参数)时,是否将修饰符 * 和&紧靠变量名. 阅读全文
posted @ 2007-06-21 14:57 似水流年-johnhuo 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 第10章 类的继承与组合对象(Object)是类(Class)的一个实例(Instance)。如果将对象比作房子,那么类就是房子的设计图纸。所以面向对象设计的重点是类的设计,而不是对象的设计。对于C++程序而言,设计孤立的类是比较容易的,难的是正确设计基类及其派生类。本章仅仅论述“继承”(Inheritance)和“组合”(Composition)的概念。注意,当前面向对象技术的应用热点是COM和CORBA,这些内容超出了C++教材的范畴,请阅读COM和CORBA相关论著。10.1 继承如果A是基类,B是A的派生类,那么B将继承A的数据和函数。例如: class A{public: void. 阅读全文
posted @ 2007-06-21 14:55 似水流年-johnhuo 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 第11章 其它编程经验11.1 使用const提高函数的健壮性看到const关键字,C++程序员首先想到的可能是const常量。这可不是良好的条件反射。如果只知道用const定义常量,那么相当于把火药仅用于制作鞭炮。const更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。const是constant的缩写,“恒定不变”的意思。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。所以很多C++程序设计书籍建议:“Use const whenever you need”。11.1.1用const修饰函数的参数如果参数作输出用,不论它是什么数据类型,也不论它. 阅读全文
posted @ 2007-06-21 14:55 似水流年-johnhuo 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 第9章 类的构造函数、析构函数与赋值函数构造函数、析构函数与赋值函数是每个类最基本的函数。它们太普通以致让人容易麻痹大意,其实这些貌似简单的函数就象没有顶盖的下水道那样危险。 每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数)。对于任意一个类A,如果不想编写上述函数,C++编译器将自动为A产生四个缺省的函数,如 A(void); // 缺省的无参数构造函数 A(const A &a); // 缺省的拷贝构造函数 ~A(void); // 缺省的析构函数 A & operate =(const A &a);// 缺省 阅读全文
posted @ 2007-06-21 14:54 似水流年-johnhuo 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 第8章 C++函数的高级特性对比于C语言的函数,C++增加了重载(overloaded)、内联(inline)、const和virtual四种新机制。其中重载和内联机制既可用于全局函数也可用于类的成员函数,const与virtual机制仅用于类的成员函数。 重载和内联肯定有其好处才会被C++语言采纳,但是不可以当成免费的午餐而滥用。本章将探究重载和内联的优点与局限性,说明什么情况下应该采用、不该采用以及要警惕错用。8.1 函数重载的概念8.1.1重载的起源 自然语言中,一个词可以有许多不同的含义,即该词被重载了。人们可以通过上下文来判断该词到底是哪种含义。“词的重载”可以使语言更加简练。例如“ 阅读全文
posted @ 2007-06-21 14:53 似水流年-johnhuo 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 第7章 内存管理 欢迎进入内存这片雷区。伟大的Bill Gates 曾经失言:640K ought to be enough for everybody — Bill Gates 1981程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本章的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。7.1内存分配方式内存分配方式有三种:(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。(2) 在栈上创建。在执行函数时,函数内局部. 阅读全文
posted @ 2007-06-21 14:52 似水流年-johnhuo 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 第6章 函数设计函数是C++/C程序的基本功能单元,其重要性不言而喻。函数设计的细微缺点很容易导致该函数被错用,所以光使函数的功能正确是不够的。本章重点论述函数的接口设计和内部实现的一些规则。函数接口的两个要素是参数和返回值。C语言中,函数的参数和返回值的传递方式有两种:值传递(pass by value)和指针传递(pass by pointer)。C++ 语言中多了引用传递(pass by reference)。由于引用传递的性质象指针传递,而使用方式却象值传递,初学者常常迷惑不解,容易引起混乱,请先阅读6.6节“引用与指针的比较”。6.1 参数的规则l 【规则6-1-1】参数的书写要完整 阅读全文
posted @ 2007-06-21 14:50 似水流年-johnhuo 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 第5章 常量 常量是一种标识符,它的值在运行期间恒定不变。C语言用 #define来定义常量(称为宏常量)。C++ 语言除了 #define外还可以用const来定义常量(称为const常量)。5.1 为什么需要常量 如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦?(1) 程序的可读性(可理解性)变差。程序员自己会忘记那些数字或字符串是什么意思,用户则更加不知它们从何处来、表示什么。(2) 在程序的很多地方输入同样的数字或字符串,难保不发生书写错误。(3) 如果要修改数字或字符串,则会在很多地方改动,既麻烦又容易出错。l 【规则5-1-1】 尽量使用含义直观的常量来表示那些将在程 阅读全文
posted @ 2007-06-21 14:49 似水流年-johnhuo 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 第4章 表达式和基本语句读者可能怀疑:连if、for、while、goto、switch这样简单的东西也要探讨编程风格,是不是小题大做?我真的发觉很多程序员用隐含错误的方式写表达式和基本语句,我自己也犯过类似的错误。表达式和语句都属于C++/C的短语结构语法。它们看似简单,但使用时隐患比较多。本章归纳了正确使用表达式和语句的一些规则与建议。4.1 运算符的优先级 C++/C语言的运算符有数十个,运算符的优先级与结合律如表4-1所示。注意一元运算符 +-* 的优先级高于对应的二元运算符。 优先级 运算符 结合律 从 高 到 低 排 列 ( )[ ]->. 从左至右 !~++--(类型) s 阅读全文
posted @ 2007-06-21 14:48 似水流年-johnhuo 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 第3章 命名规则比较著名的命名规则当推Microsoft公司的“匈牙利”法,该命名规则的主要思想是“在变量和函数名中加入前缀以增进人们对程序的理解”。例如所有的字符变量均以ch为前缀,若是指针变量则追加前缀p。如果一个变量由ppch开头,则表明它是指向字符指针的指针。“匈牙利”法最大的缺点是烦琐,例如int i,j,k;floatx,y,z;倘若采用“匈牙利”命名规则,则应当写成int iI,iJ,ik;// 前缀 i表示int类型floatfX,fY,fZ;// 前缀 f表示float类型如此烦琐的程序会让绝大多数程序员无法忍受。据考察,没有一种命名规则可以让所有的程序员赞同,程序设计教科. 阅读全文
posted @ 2007-06-21 14:47 似水流年-johnhuo 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 第2章 程序的版式 版式虽然不会影响程序的功能,但会影响可读性。程序的版式追求清晰、美观,是程序风格的重要构成因素。可以把程序的版式比喻为“书法”。好的“书法”可让人对程序一目了然,看得兴致勃勃。差的程序“书法”如螃蟹爬行,让人看得索然无味,更令维护者烦恼有加。请程序员们学习程序的“书法”,弥补大学计算机教育的漏洞,实在很有必要。2.1 空行空行起着分隔程序段落的作用。空行得体(不过多也不过少)将使程序的布局更加清晰。空行不会浪费内存,虽然打印含有空行的程序是会多消耗一些纸张,但是值得。所以不要舍不得用空行。l 【规则2-1-1】在每个类声明之后、每个函数定义结束之后都要加空行。参见示例2-1 阅读全文
posted @ 2007-06-21 14:44 似水流年-johnhuo 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 第1章 文件结构每个C++/C程序通常分为两个文件。一个文件用于保存程序的声明(declaration),称为头文件。另一个文件用于保存程序的实现(implementation),称为定义(definition)文件。C++/C程序的头文件以“.h”为后缀,C程序的定义文件以“.c”为后缀,C++程序的定义文件通常以“.cpp”为后缀(也有一些系统以“.cc”或“.cxx”为后缀)。1.1 版权和版本的声明版权和版本的声明位于头文件和定义文件的开头(参见示例1-1),主要内容有:(1)版权信息。(2)文件名称,标识符,摘要。(3)当前版本号,作者/修改者,完成日期。(4)版本历史信息。 /* 阅读全文
posted @ 2007-06-21 14:43 似水流年-johnhuo 阅读(159) 评论(0) 推荐(0) 编辑