c写成OOP还蛮有乐趣的
编译环境:Xcode3.2.3+gcc4.2
复制代码 代码如下:
#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
复制代码 代码如下:
#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
#include
#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;
}



