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

Natalia ·
更新时间:2024-11-14
· 896 次阅读

研究了一下,总算勉强能够融会贯通了
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 <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;
}

您可能感兴趣的文章:C++ new/delete相关知识点详细解析浅析c++中new和delete的用法c++中new和delete操作符用法C++中new与delete、malloc与free应用分析C++之CNoTrackObject类和new delete操作符的重载实例C++ new、delete(new[]、delete[])操作符重载需要注意的问题C++基础入门教程(五):new和delete详解C++中new运算符和delete运算符的使用C++表达式new与delete知识详解



oop new C语言 delete

需要 登录 后方可回复, 如果你还没有账号请 注册新账号