高质量C++/C 编程指南—读后感

高质量 C++/C 编程指南 读后感

2005-9-21

    读了前言,感触颇深,以前一直认为只要会编程,能够实现所要求的功能就可以算的上是一个合格的程序员了,然而今天才了解到,并没有这么简单,就以个小小的函数而言,它实现的只是一个功能,但是对一个合格的程序员来说却需要注意很多问题:首先是编程风格,一段整齐的代码可读性强,在适当的地方加上详细的注释,让别人充分理解你的程序,如果一段程序只有编写者自己才能读懂,这段程序只能说是很失败的程序;其次是异常处理,每一个输入输出都可能产生异常,而异常则会导致程序的崩溃或者输出结果与预期的值不符合,程序要如何保证对各种各样异常的处理,如何保证程序运行的正确性,这一点也非常重要;还有对算法的复杂度的设计,同样的功能,不同的算法可能产生不同的效率,所需的资源也可能有差别,不能只是认为简单的实现了功能就万事大吉了,要好好的思考一下如何才能提高程序的效率,要设计高效率的程序。

    第一章主要讲文件的结构,文件应该定义两个部分,头文件和定义文件,在前面还要再加上版权和版本的声明。以前自己写程序都是所有的东西都写在一个文件中,包括头文件,定义文件,这样,文件的结构不是很清楚,而且在代码多的时候更加觉的很繁琐,而将这两个文件分开定义则都很分明,在都文件中都是定义的部分,而在定义文件中写程序的实现体,这样是比较清晰的,在项目大的时候会用到目录结构,需要更加注意。

    第二章讲程序的版式,觉的这部分很重要,这是一个习惯问题,空行和空格不会浪费内存,但是却可以使得程序结构清晰,其实编程也是一种艺术,清晰的代码会给人很轻松的感觉,而烦乱的代码会使人容易厌倦,不想再读下去!变量初始化最好采用就近原则,负责容易忘记,要养成对齐的好习惯,长行需要拆分,太长会不方便阅读,要记得注释,我最近作的两个例子中都很少加注释,清晰的注释更容易让别人理解你的程序,所以一定要加注释,而且尽量要注释清楚。类中定义顺序最好先定义public函数,再定义private数据,不过我的习惯刚好相反,所以这方面需要注意。

    第三章讲名规则,大多数公司或者项目组都会又自己的命名规则,不过有一些共有的,在本章有所介绍,我在编程的过程中,经常会用到i,j等局部变量,而且很多都只是很简单的字母,这个习惯很不好,这样代码的可读性差,所以要注意命名,要用英文单词的组合让函数或者参数从名字上就可以知道他们的作用或者意义,这一点值得注意,这也是需要养成的习惯。

    第四章讲表达式和基本语句,布尔类型与零值的比较要用if(flag)或者在flag前加!表示false,它不应与具体的值比较,整形值比较用==(!=),用=表示赋值,浮点型比较:if ((x>=-EPSINON) && (x<=EPSINON))其中EPSINON 是精度,不要与0.0比较,指针应该与NULL比较。使用三元运算符可以使程序更简洁!循环要考虑到效率,写法的不同可能导致效率差别很大,要采用高效的循环方式!还有一些小的细节需要注意,在文章中都有详细的说明。

    第五章讲常量,常量用起来是很方便的,但是在类中const 数据成员的初始化只能在类构造函数的初始化表中进行,这点值得注意,在类中还要注意枚举常量的使用!

    第六章函数设计,需要注意的几点:1.输入参数值传递,用const &方式提高效率;2.尽量用引用传递,但是在某些场合必须要用值传递,视情况而定;3.返回值的使用,不能返回指向“栈内存”的“指针”或者“引用”,返回对象时要考虑到效率;4.函数要短小精悍,功能单一,尽量少用static,要用assert这个利器进行测试;5.指针和引用的使用,我在学习C++的时候,对指针就不是很了解,没有掌握指针的用法,现在还在学习,不过应该尽量使用引用,尽量避免指针的一些特殊用法。

    第七章讲内存管理,这个部分是个难点,对内存的管理非常灵活,但是问题也是非常多的,很容易就会出现很多的问题。1.内存分配之后加assert(p!=NULL),或者在用new申请内存时用if(p==NULL)或if(p!=NULL)进行防错处理;2.申请完内存之后马上进行初始化,这一点要养成习惯;3.内存使用完后,释放内存,这点对以前使用java的我尤为重要,以前在java机制中,不需要释放内存,由java的机制自动回收,但是vc++不同,需要释放资源,以免内存泄漏;4.释放内存之后,将指针设置为NULL,防止产生“野指针”;5.指针和数组内容的复制要用strcpy函数,不能用==,而比较要用strcmp;6.内存容量用sizeof获取;7.不能用指针申请动态内存,要用指针的指针或者用函数的返回值来传递动态的内存;8.free和delete只是释放内存,并没有把指针本身干掉;9.“野指针”是指向“垃圾内存的指针”,指针操作超越了变量的作用范围会产生“野指针”;10. malloc/free不能用在构造函数和析构函数中,在这里要用到new/delete;11.一般情况下,不会出现内存耗尽的问题,不过高质量的程序还是应该考虑到这个问题。总的来说,本章是个重点,指针的使用是一大难点,要学会使用指针,有效的使用指针可以提到程序的效率,指针虽然容易出错,但是却非常的灵活,正确使用非常重要。

第八章讲C++的高级特性,了解了一下的特性:1.重载简言之就是函数名相同,参数不同(作用域要相同);2. 当心隐式类型转换导致重载函数,有些值,系统不知道要转换成什么类型,所以要对其进行显式转换,这样不至于得到意料之外的结果;3.在覆盖和重载的时候经常会遇到隐藏,很容易搞混乱,解决方法载文章中有,覆盖必须要有virtual关键字;4. 参数缺省值只能出现在函数的声明中,而不能出现在定义体中,函数有多个参数,参数只能从后向前挨个儿缺省;5.运算符的重载,比较难,不要轻易使用;6. 关键字inline 必须与函数定义体放在一起才能使函数成为内联,只放在声明处不能,类声明之中的成员函数将自动地成为内联函数,内联函数是以内存为代价的,慎用内联。

第九章讲构造函数等内容,有以下的收获:1.构造函数负责对象的创建,用于初始化成员变量,析构函数用于销毁对象,在构造函数中要注意初始化列表的使用;2.拷贝构造函数和赋值函数较难写,需要在使用中进一步理解体会。本章的内容与类有关,在以后的编码过程中需要多加注意。

第十章讲类的继承和组合,类的继承体现的面相对象的编程思想,提倡使用,但是在一些情况下需要用到组合,要注意编程的设计方法,不要觉得代码正确就可以了,要用正确的设计方法,编写出高质量的程序。

第十一章讲其他的编程经验,const的用法有很多,它不仅仅定义一个常量,还可以定义函数,const函数不允许修改数据成员和调用非const成员函数。在后面还列出了很多需要注意的技巧,在编程的过程中因该严格执行,养成好的编程习惯。

附录以及习题是对文章中的内容的总结和检测。

    以上是对本文的理解和对关键点的记录,这本书可以作为一个规范,随时翻翻,应该按照里面提到的各种规则严格要求自己,在以后的编程中形成一种良好的编程习惯,这样才能编出高质量的程序。

posted on 2005-09-21 15:35 扭转乾坤 阅读(778) 评论(0)  编辑  收藏 所属分类: 乱七八糟


只有注册用户登录后才能发表评论。


网站导航:
 
<2005年9月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

导航

统计

常用链接

留言簿(2)

随笔分类(31)

随笔档案(30)

文章分类(32)

文章档案(33)

相册

PHP小站-首页

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜