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

 更新时间:2013年05月31日 10:34:54   作者:  
本篇文章是对用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 <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程序中唯一序列号的生成实例详解

    C程序中唯一序列号的生成实例详解

    这篇文章主要介绍了C程序中唯一序列号的生成实例详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • C++语言实现线性表之数组实例

    C++语言实现线性表之数组实例

    这篇文章主要介绍了C++语言实现线性表之数组,实例分析了C++实现数组形式线性表的原理与方法,需要的朋友可以参考下
    2015-04-04
  • 了解C++编程中指定的异常和未经处理的异常

    了解C++编程中指定的异常和未经处理的异常

    这篇文章主要介绍了C++中指定的异常和未经处理的异常,介绍了有关noexcept和terminate的作用,并结合了C++11标准的新特性,需要的朋友可以参考下
    2016-01-01
  • VC随机函数srand和rand用法

    VC随机函数srand和rand用法

    VC中随机函数最常用就是srand和rand(实际上是属于标准C函数),其中srand负责设置随机种子,rand则负责生成随机数。使用此二随机函数需要包含<stdlib.h>头文件
    2016-11-11
  • c++连续输入未知个数的数字操作

    c++连续输入未知个数的数字操作

    这篇文章主要介绍了c++连续输入未知个数的数字操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • C++语言实现hash表详解及实例代码

    C++语言实现hash表详解及实例代码

    这篇文章主要介绍了C++语言实现hash表详解及实例代码的相关资料,需要的朋友可以参考下
    2017-01-01
  • C语言 二级指针详解及示例代码

    C语言 二级指针详解及示例代码

    本文主要介绍C语言 二级指针,这里整理了C语言中二级指针的基础资料并附有示例代码和实现结果,帮助大家学习理解相关知识,有学习的朋友可以参考下
    2016-08-08
  • C语言堆栈入门指南

    C语言堆栈入门指南

    我身边的一些编程的朋友以及在网上看帖遇到的朋友中有好多也说不清堆栈,所以我想有必要给大家分享一下我对堆栈的看法,有说的不对的地方请朋友们不吝赐教,这对于大家学习会有很大帮助
    2014-01-01
  • C++数据结构与算法之判断一个链表是否为回文结构的方法

    C++数据结构与算法之判断一个链表是否为回文结构的方法

    这篇文章主要介绍了C++数据结构与算法之判断一个链表是否为回文结构的方法,结合实例形式分析了回文结构并结合实例给出了C++判断回文的操作技巧,需要的朋友可以参考下
    2017-05-05
  • C++实现动态顺序表(vector)

    C++实现动态顺序表(vector)

    这篇文章主要为大家详细介绍了C++实现动态顺序表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05

最新评论