- 论坛徽章:
- 24
|
原帖由 zhujiang73 于 2008-5-20 14:43 发表 ![]()
最简单的继承:
...
最简单的多继承:
#include <stdio.h>
#pragma pack(1)
#define SIZETAB 6
#define A_ID 1001
#define B_ID 1002
#define C_ID 1003
typedef struct
{
int id;
int madd;
} CInfo;
typedef struct
{
int ma;
} A;
typedef struct
{
int mb;
} B;
typedef struct
{
CInfo citab[SIZETAB];
A parent01;
B parent02;
int mc;
} C;
void* get_parent(void *this, int id_parent)
{
void *pp;
CInfo *pc;
pp = 0;
pc = (CInfo*)this;
int i;
for (i=0; i<SIZETAB; i++)
{
if (pc->id == 0) break;
if (pc->id == id_parent)
{
pp = this + pc->madd;
break;
}
pc++;
}
return pp;
}
void C_init(void *this)
{
CInfo *pc = (CInfo*)this;
pc->id = A_ID;
pc->madd = sizeof(CInfo)*SIZETAB;
pc++;
pc->id = B_ID;
pc->madd = sizeof(CInfo)*SIZETAB + sizeof(A);
pc++;
pc->id = 0;
}
int main (int argc, char *argv[])
{
C c;
A *pa;
B *pb;
C *pc;
void *pp;
pc = &c;
C_init((void*)pc);
pp = get_parent((void*)pc, A_ID);
pa = (A*)pp;
pa->ma = 10;
pp = get_parent((void*)pc, B_ID);
pb = (B*)pp;
pb->mb = 20;
pc->mc = 30;
printf("c.ma = %d c.mb = %d c.mc = %d\n", c.parent01.ma, c.parent02.mb, c.mc);
return 0;
}
|
|
|