采用纯C语言进行面向对象编程的模板 - OOC-GCC

分享到:

这是一个模板,是一些宏的集合,针对跨平台的GCC设计[0.11版以后的与VC9编译器兼容]

只用纯粹的C实现简单的OO的机制而不必了解冗杂的C++的语法,

其实现了简单的"类"的模拟,析构与构造,以及对单根继承的模拟.

在很大程度上,可以模拟完成大部分OO中较为重要的特性.

另有简化版ooc-lite( http://code.google.com/p/ooc-lite/ )及相关文档,

提供测试实例及设计思路详解.

#include "OOStd.h"

CLASS(Animal){
char *name;
STATIC(Animal);
vFn talk;
};
static int Animal_load(Animal *THIS,void *name){
THIS->name=name;
return 0;
}
ASM(Animal,Animal_load,NULL,NULL,NULL)

CLASS_EX(Cat,Animal){
STATIC_EX(Cat,Animal);
};
static void Meow(Animal *THIS){
printf("Meow!My name is %s!\n",THIS->name);
}

static int Cat_loadSt(StAnimal *THIS,void *PARAM){
THIS->talk=(void *)Meow;
return 0;
}
ASM_EX(Cat,Animal,NULL,NULL,Cat_loadSt,NULL)


CLASS_EX(Dog,Animal){
STATIC_EX(Dog,Animal);
};
static void Woof(Animal *THIS){
printf("Woof!My name is %s!\n",THIS->name);
}
static int Dog_loadSt(StAnimal *THIS,void *PARAM){
THIS->talk=(void *)Woof;
return 0;
}
ASM_EX(Dog,Animal,NULL,NULL,Dog_loadSt,NULL)

int main(){
Animal *animals[4000];
StAnimal *f;
int i=0;
for(i=0;i<4000;i++)
{
if(i%2==0) animals[i]=NEW(Dog,"Jack");
else animals[i]=NEW(Cat,"Lily");
};
f=ST(animals[0]);
for(i=0;i<4000;++i){
f->talk(animals[i]);
}
for(i=0;i<4000;++i){
DELETE0(animals[i]);
}
return 0;
}

项目主页:http://www.open-open.com/lib/view/home/1326987473218

昵    称:
验证码:

相关文档:

  • C++各大有名库的介绍之C++标准库
    标准库中提供了C++程序的基本设施。虽然C++标准库随着C++标准折腾了许多年,直到标准的出台才正式定型,但是在标准库的实现上却很令...
  • 50条大牛C++编程开发学习建议
    每个从事C++开发的朋友相信都能给后来者一些建议,但是真正为此进行大致总结的很少。本文就给出了网上流传的对C++编程开发学习的50...
  • C++系统调用库 CSCall++
    CSCall++ 是对常用的一些系统调用进行封装的 C++ 库,主要包括:线程、文件、FIFOs、串行IO、socket通讯和目录处理等。...
  • C++11 多线程:数据保护
    在编写多线程程序时,多个线程同时访问某个共享资源,会导致同步的问题,这篇文章中我们将介绍 C++11 多线程编程中的数据保护。...
  • Node.js的C++移植版本 Node.native
    node.native 是 node.js 的一个 C++11 (aka C++0x) 的一个移植。...
  • C,C++开源项目中的100个Bugs
    俄罗斯OOO Program Verification Systems公司用自己的静态源码分析产品PVS-Studio对一些知名的C/C++开源项目,诸如Apache Http Server、Chromium、Clang、CMa...
  • C++程序如何精确查找内存泄漏
    本文主要介绍了C++程序在Windows平台上各种定位内存泄漏的方法,并对比了它们的优缺点。...
  • 免费的C/C++的线程库
    免费的C/C++的线程库...
  • java嵌入c,c++程序指南
    本文为在 32 位 Windows 平台上实现 Java 本地方法提供了实用的 示例、步骤和准则。本文中的示例使用 Sun Microsystems 公司创建的 Java Developmen...
  • C语言常用工具库 libHX
    libHX 是一个C语言的库,提供队列、 树、选项解析、字符串操作等功能。...
  • C++智能指针的设计和使用
    对于一个C++的使用者来说,指针的使用可以算的上是家常便饭,但是在使用的过程中,很多时候可能会因为new或者malloc了一个对象,而忘...
  • 使用 C++ 的 StringBuilder 提升 4350% 的性能
    经常出现客户端打电话抱怨说:你们的程序慢如蜗牛。你开始检查可能的疑点:文件IO,数据库访问速度,甚至查看web服务。 但是这些可...
  • 通用LINUX C类库 jzlibs
    通用LINUX C类库。 包含双向链表、单向链表、向量、哈希表、红黑树等经典数据结构及其算法...
  • C/C++命名风格
    存在C/C++中的四种命名风格: 帕斯卡(Pascal)命名法 将标识符的首字母和后面连接的每个单词的首字母都大写。可以对三字符或更...
  • 用C语言编写的微小HTTP解析器:PicoHTTPParser
    PicoHTTPParser是一个很小的,原始的,快速的HTTP请求/响应解析器。...
  • GCC的图形化前端 wxgcc
    wxgcc 的全称是:wxpython gcc compiling toolkit ,它是一个在Linux环境下使用的,基于 wxpython 的GCC 编译器图形前端软件,可以用来快速的编译验...
  • 强大稳定的字符串分割 C++ 类:StringSpliter
    一个强大稳定的字符串分割 C++ 类,是对 c_tokenizer 的封装。...
  • Facebook Folly源代码分析
    Folly 是 Facebook 的一个开源C++11组件库,它提供了类似 Boost 库和 STL 的功能,包括散列、字符串、向量、内存分配、位处理等,用于满足...
  • C++格式化输出库 FastFormat
    FastFormat 是一个C/C++格式化输出的库,输入的参数是类型安全的/范型的/可扩展的。...
  • C语言的hash表实现:uthash
    uthash是一个C语言的hash表实现。它以宏定义的方式实现hash表,不仅加快了运行的速度,而且与关键类型无关的优点。 uthash使用起来十...