c语言oop,利用C语言实践OOP,以及new,delete的深入分析

研究了一下,总算勉强能够融会贯通了

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;

}

094f271872e8d0e76861ad0936d787f3.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值