用C构造体来实现面向对象编程,ti xDAIS标准算法就这么搞的
用C结构体来实现面向对象编程,ti xDAIS标准算法就这么搞的
用C结构体来实现面向对象编程,ti xDAIS标准算法就这么搞的。
测试代码如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Alg_Obj{ struct Alg_Fxn* fxns; }Alg_Obj; typedef Alg_Obj *Alg_Handle; typedef struct Alg_Fxn{ void (*process)(Alg_Handle handle); void (*control)(Alg_Handle handle); }Alg_Fxn; void Alg_process(Alg_Handle handle) { handle->fxns->process(handle); printf("in Alg_process.. \n"); } void Alg_control(Alg_Handle handle) { handle->fxns->control(handle); printf("in Alg_control.. \n"); } struct triangle{ Alg_Handle handle; int a; int b; int c; }; void tri_process(Alg_Handle handle) { struct triangle *t = (struct triangle*)handle; int a = t->a; int b = t->b; int c = t->c; printf(" [in tri_process] sum=%d\n",a+b+c); } void tri_control(Alg_Handle handle) { struct triangle *t = (struct triangle*)handle; int a = t->a; int b = t->b; int c = t->c; printf(" [in tri_control] sum=%d\n",(a+b+c)*2); } Alg_Fxn gfxns = { tri_process, tri_control, }; int main() { struct triangle *ret = (struct triangle*)malloc(sizeof(struct triangle)); ret->handle->fxns=&gfxns; ret->a = 2; ret->b = 3; ret->c = 4; Alg_Handle Handle= (Alg_Handle)ret; //第一种调用,注意结果 gfxns.process(Handle); gfxns.control(Handle); printf("\n**********************************\n"); //第二种调用,注意结果 Alg_process(Handle); Alg_control(Handle); free(Handle); return 0; } /* [root@localhost TestCode]# ./a.out [in tri_process] sum=9 [in tri_control] sum=18 ********************************** [in tri_process] sum=9 in Alg_process.. [in tri_control] sum=18 in Alg_control.. */