BLUESKY
一步一个脚印向前走

最近没有啥事,翻开了自己搜集的文档,发现了这个不错的编程指导,“浪费”了3天的时间把它看完了,结合以前的工作经验,发现了很多问题,下面就来说说。

从大体上讲,这位仁兄写的这个文档涵盖面还是很广的,从程序员所谓的习惯到程序本身的一些技巧,都给出了自己定义的一些规则,其实还是经验之谈,经常被大家所忽略,但是又很重要的东西。

这个文档分的章节包括:基本的文件结构(程序版式)、命名规则、函数设计、内存管理、C++高级特性、类构造函数/析构函数/赋值函数、类的继承与组合等(其实这个文档当初进公司的时候已经见到过,但是没有细看),从这些章节来看,作者还主要是着重介绍的C++方面的。

在这些章节中,虽然自己知道的有一半,但是真正运用到实际中的却几乎很少,下面就罗列下给俺印象深刻的几点规则:

1、对于非内部数据类型的输入参数,应该将“值传递”的方式改为“const引用传递”,目的是提高效率。对于内部数据类型的输入参数,不要将“值传递”的方式改为“const引用传递”。否则既达不到提高效率的目的,又降低了函数的可理解。
(在以前,自己定义函数的时候,对于输入参数,不管其是否是内部的还是非内部类型的,一古脑全定义成const vartype &varname,现在看起来有待改进了)

2、类的组合概念,以前只晓得继承,只要是B和A有关系就继承,现在看来需要修正下了,作者的建议是:若在逻辑上A是B的“一部分”(a part of),则不允许B从A派生,而是要用A和其它东西组合出B;在这里如果不小心的话,会很容易犯下设计错误的。

3、类的拷贝构造函数和赋值函数的辨别;拷贝构造函数是在对象被创建时被调用的,而赋值函数只能被已经存在的对象调用,作者给出了下面的例子:
String  a(“hello”);
String  b(“world”);
String  c = a;  // 调用了拷贝构造函数,最好写成 c(a);
          c = b; // 调用了赋值函数

如果我们实在不想编写拷贝构造函数和赋值函数,又不允许别人使用编译器生成的缺省函数,怎么办?
偷懒的办法是:只需将拷贝构造函数和赋值函数声明为私有函数,不用编写代码。
这样别人调用的时候就会报错,哈哈,好办法!

4、内存管理的一些建议;其中讲述了内存分配的几个函数FREE/MALLOC,NEW/DELETE的区别,其中前者是库函数,而后者是运算符,前者无法满足动态对象的要求,因为对象在创建时执行构造函数,消亡时执行析构函数等。在此章节还告诫程序员如何在使用指针的时候,如何避免野指针的出现,这个已经是很早以前就需要谨记的了,现在又更加深刻了!

其他的还有好多的小细节,在这里就不罗列出来了,每次看这个文档每次的收获都是不一样的,自己知道的忒少咯!


 

posted on 2009-02-19 15:34 LG 阅读(189) 评论(0)  编辑 收藏 引用 所属分类: CPlusPlus

<2009年2月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
1234567

常用链接

相册

最新评论