c语言实现c++的继承和多态,父类指针指向子类对象
typedef struct {
void (*push)(void *data, int len );
void (*pop)(void *data, int *len );
} base_queue_t;
typedef struct {
base_queue_t base;
void *__mem;
} circle_queue_t;//circle是base_queue_t的继承
typedef struct {
base_queue_t base;
void *__mem;
} babi_queue_t;// babi_queue继承于base_queue_t
void circle_push( void *data, int len)
{
...
}
void circle_pop( void *data, int *len)
{
...
}
base_queue_t *new_circle_queue()
{
circle_queue_t *queue = (circle_queue_t *)malloc( sizeof(circle_queue_t));
base_quque_t *base = (base_queue_t *)queue;
base->push = circle_push;
base->pop = circle_pop;
return (base_queue_t *)queue;
}
void babi_push()
{
...
}
void babi_pop()
{
...
}
base_queue_t *new_babi_queue()
{
circle_queue_t *queue = (circle_queue_t *)malloc( sizeof(circle_queue_t));
base_queue_t *base = (base_queue_t*)queue;
base->push = babi_push;
base->pop = babi_pop;
return (base_queue_t *)queue;
}
/* 这样做的好处是统一接口 */
int main()
{
void *data;
int len;
base_queue_t *q;
q = new_circle_queue();
q->push( data, len );
q->pop( data, len );
q = new_babi_queue();
q->push( data, len );
q->pop( data, len );
}