利用C語言實踐OOP,以及new,delete的深入分析
更新時間:2013年05月31日 10:34:54 作者:
本篇文章是對用C語言實踐OOP,new,delete進行了詳細的分析介紹,需要的朋友參考下
研究了一下,總算勉強能夠融會貫通了
c寫成OOP還蠻有樂趣的
編譯環(huán)境: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寫成OOP還蠻有樂趣的
編譯環(huán)境: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++實現(xiàn)LeetCode(173.二叉搜索樹迭代器)
這篇文章主要介紹了C++實現(xiàn)LeetCode(173.二叉搜索樹迭代器),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08C語言數(shù)據(jù)結構算法之實現(xiàn)快速傅立葉變換
這篇文章主要介紹了C語言數(shù)據(jù)結構算法之實現(xiàn)快速傅立葉變換的相關資料,需要的朋友可以參考下2017-06-06C++使用OpenCV實現(xiàn)證件照藍底換成白底功能(或其他顏色如紅色)詳解
這篇文章主要介紹了C++使用OpenCV實現(xiàn)證件照藍底換成白底功能(或其他顏色如紅色),結合實例形式詳細分析了OpenCV顏色轉換相關操作原理與實現(xiàn)技巧,需要的朋友可以參考下2019-12-12