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

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)。

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值