• 类的设计原则


     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关键字来约束接口

  • 相关阅读:
    Idea中将项目支持groovy语法
    Python驱动SAP GUI完成自动化(四)
    山东一男孩疑被假警察掳走
    关系型数据库,查看表列表,及字段列表
    my.cnf配置
    MySQL 密码策略
    Docker UnicodeEncodeError: 'ascii' codec can't encode characters in position
    三星S20开启120Hz高刷新率
    三星S20关闭5G消息状态图标
    Centos 7挂载本地ISO光盘
  • 原文地址:https://www.cnblogs.com/skyofbitbit/p/2682398.html
Copyright © 2020-2023  润新知