源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-08-09 00:32 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:利用C语言实践OOP,以及new,delete的深入分析
研究了一下,总算勉强能够融会贯通了 c写成OOP还蛮有乐趣的 编译环境:Xcode3.2.3+gcc4.2
[u]复制代码[/u] 代码如下:
#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
[u]复制代码[/u] 代码如下:
#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); } // --------------------------//
[u]复制代码[/u] 代码如下:
#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; }
[img]http://files.jb51.net/file_images/article/201305/2013053110295412.gif[/img]
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部