研究了一下,总算勉强能够融会贯通了 c写成OOP还蛮有乐趣的 编译环境:Xcode3.2.3+gcc4.2 /* * Cloud.h * CloudOOC * * Created by Cloud on 2010/8/21. * Copyright 2010 Orz. All rights reserved. * */ #ifndef OBJECT_H #define OBJECT_H typedef void (*Execute)(struct Object *a_This); typedef struct Object* (*Allocate)(); typedef struct _Object_Vtable { char *name; Execute exe; }Object_Vtable; typedef struct _baseCmd { Object_Vtable vtable; }BaseCmd; // --- for common --- // BaseCmd* new(Allocate newObj); void delete(void * item); // --------------------------// // --- for BaseCmd --- // BaseCmd* NewBaseCmd(); void Exe_BaseCmd(BaseCmd *a_This); // --------------------------// // --- for HomeCmd --- // typedef struct _homeCmd { Object_Vtable vtable; }HomeCmd; BaseCmd* NewHomeCmd(); void Exe_HomeCmd(HomeCmd *a_This); // --------------------------// #endif /* * Cloud.c * CloudOOC * * Created by Cloud on 2010/8/21. * Copyright 2010 Orz. All rights reserved. * */ #include "Cloud.h" // --- for common --- // BaseCmd* new(Allocate newObj) { BaseCmd * obj = newObj(); return obj; } void delete(void * item) { free(item); } // --------------------------// // --- for BaseCmd --- // BaseCmd* NewBaseCmd() { BaseCmd * cmd = malloc(sizeof(BaseCmd)); cmd->vtable.name = "Cloud"; cmd->vtable.exe = Exe_BaseCmd; return cmd; } void Exe_BaseCmd(BaseCmd *a_This) { printf("do base command = %s/n",a_This->vtable.name); } // --------------------------// // --- for HomeCmd --- // BaseCmd* NewHomeCmd() { HomeCmd * cmd = malloc(sizeof(HomeCmd)); cmd->vtable.name = "Home"; cmd->vtable.exe = Exe_HomeCmd; return cmd; } void Exe_HomeCmd(HomeCmd *a_This) { printf("do home command = %s/n",a_This->vtable.name); } // --------------------------// #include <stdio.h> #include <stdlib.h> #include "Cloud.h" int main (int argc, const char * argv[]) { BaseCmd* cmd = new(NewBaseCmd); cmd->vtable.exe(cmd); delete(cmd); BaseCmd* cmd2 = new(NewHomeCmd); cmd2->vtable.exe(cmd2); delete(cmd2); return 0; }