- (). - , -- . , -- , , -, .
, , C . , , . , Window (). , , , . C, , . Item, Shape, Box Circle:
struct ItemClass
{
char* class_name;
void(* cut)();
void(* move)();
Boolean(* pick)();
void(* ungroup)();
};
struct ShapeClass
{
char* class_name;
void(* cut)();
void(* move)();
Boolean(* pick)();
void(* ungroup)();
void(* write)();
};
struct BoxClass
{
char* class_name;
void(* cut)();
void(* move)();
Boolean(* pick)();
void(* ungroup)();
void(* write)();
};
struct CircleClass
{
char* class_name;
void(* cut)();
void(* move)();
Boolean(* pick)();
void(* ungroup)();
void(* write)();
};
, , : , , (, Box move Shape, pick write :
struct BoxClass BoxClass =
{
Box,
Shape__cut,
Shape__move,
Box__pick,
Shape__ungroup,
Box__write,
};
struct CircleClass CircleClass =
{
Circle,
Shape__cut,
Shape__move,
Circle__pick,
Shape__ungroup,
Circle__write,
};
, . , - .
, (, Shape). , Class , :
struct Circle * create_circle(x0,y0,radius0)
|
|
Length x0,y0,radius0;
{
struct Circle * new_circle;
new_circle =
(struct Circle*)malloc(sizeof(struct Circle));
new_circle->class = &CircleClass;
new_circle->x = x0;
new_circle->y = y0;
new_circle-> radius = radius0;
return new_circle;
};
, . , pick (Shape), , :
struct Shape* shape;
Length x,y;
Boolean status;
status = (*shape->class->pick)(shape,x,y);
.
, - : () .
( ), (), - ; ( ), , ( STL) . , , .
, (, ).
( ) Item Group:
struct Item
{
struct ItemClass* class;
struct Group* group;
};
struct Group
{
struct GroupClass* class;
int item_count;
struct Item** items;
};