您的位置:首页 > Web前端

EffectiveJava之19-用类层次代替联合

2014-11-23 16:07 197 查看
1、  C中的联合体:

typedef  enum {RECT , CIRC} shape_type

 

typedef  struct {

       double length;

       double width;

}rectangleDimensions_t

      

typedef  struct {

       double radius;

}circle Dimensions_t

 

typedef  struct {

       shape_type tag ;

       union {

           rectangleDimensions_t   rectangle ;

              circle Dimensions_t circle ;

}dimensions

       } shape_t

 

 

       double area ( shape_t * pshape_t ){

              switch( pshape_t ->tag){

              case RECT : {

                     double length = pshape_t-> dimensions . rectangle .length ;

                     double width = pshape_t-> dimensions . rectangle .width ;

                     return           l* w ;

}

           CaseCIRC : {

           double  r = pshape_t-> dimensions . circle.radius;

              return           r*r*Pi;

 

           }

           Default: return -1;

  

      把一个可区分的联合变换为一个类层次:

      先定义一个抽象类,每个操作定义一个抽象方法,其行为取决去便签的值。

      如上例:  area 这个首相类的类层次的根(root)。

                 如果有其他的操作行为不依赖于标签的值,则吧这些操作变成根类中的具体方法。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: