类的设计原则

 1.在设计一个类时,可能会不自觉地与它的实现相联系(譬如,这个接口我这样设计,功能是否能最终实现?).这是一个很基本的错误.

   设计时要把抽象与实现分离。理由很简单,一是简化了类的抽象,忽略对当前设计目的来说不重要的属性或特性,如飞机驾驶培训系统的飞机类,就可以忽略飞机的客舱内部布置;二是把抽象与实现分现,将使抽象的实现更灵活。如飞机的起降控制,只需提供两个接口,具体起飞控制流程和降落控制流程并不需要涉及。又如,酒店预订系统的房间类,可以不考虑房间的装修时间,室内陈设的新旧程度,提供退房接口,也不关心退房的具体流程。

2.接口要最小化.通常,一个完美的类应该包含下面这些成员1~6。但是这不是所有类必须的,如果不需要,或者根本就是累赘,最好不要提供,下面一一举例说明。

       1) 缺省构造函数 :

           class  Pool{

          public:  Pool(size_t n);  //内调alloc,实现对象内存分配

                    void*  alloc();   

                    void  free(void* p);}

              如果提供了默认构造,则无法确定所分配对象的默认大小。

       2) 拷贝构造函数

             如C++语法解析器类Parser,由于具有大量内部数据结构,因此要想正确的拷贝它,将是非常不易的,也是不值得的。

       3)相等运算符

           如一个程序运行过程中,该类只有一个实例,显然,该类的相等运算符就有些多余。

 

       4) 基本的赋值运算符

              class   Pool { 

               public :

                       Pool&  operator=( const  Pool&  q);

             };

           我觉得原文作者关于这一点有些不对,实际上他列举的例子问题根结在于赋值前没有删除原有指针内存。

       5)   析构函数

          有些时候,不允许调用析构。这时候,我们就可以声明私有的析构(只能在堆上创建,又不能调delete删除)。

 

 

3. 注意深拷贝与浅拷贝,有些时候的影响将是灾难性的。

 

5.接口一致性

 

6.转型

   某些隐式转型是不受欢迎的。要加以约束。或使用explicit 

 

7.最大限度使用const关键字来约束接口

posted on 2012-09-12 21:09  bitbit  阅读(537)  评论(0编辑  收藏  举报