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)。
如果有其他的操作行为不依赖于标签的值,则吧这些操作变成根类中的具体方法。