Chinaunix首页 | 论坛 | 博客
  • 博客访问: 226215
  • 博文数量: 56
  • 博客积分: 2480
  • 博客等级: 大尉
  • 技术积分: 475
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-28 10:57
文章分类

全部博文(56)

文章存档

2012年(36)

2011年(4)

2010年(2)

2009年(14)

我的朋友

分类: C/C++

2012-04-16 12:18:52



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

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

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

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

另有简化版ooc-lite(  )及相关文档,

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

01#include "OOStd.h"
02 
03CLASS(Animal){
04        char *name;
05        STATIC(Animal);
06        vFn talk;
07};
08static int Animal_load(Animal *THIS,void *name){
09        THIS->name=name;
10        return 0;
11}
12ASM(Animal,Animal_load,NULL,NULL,NULL)
13 
14CLASS_EX(Cat,Animal){
15        STATIC_EX(Cat,Animal);
16};
17static void Meow(Animal *THIS){
18        printf("Meow!My name is %s!\n",THIS->name);
19}
20 
21static int Cat_loadSt(StAnimal *THIS,void *PARAM){
22        THIS->talk=(void *)Meow;
23        return 0;
24}
25ASM_EX(Cat,Animal,NULL,NULL,Cat_loadSt,NULL)
26 
27 
28CLASS_EX(Dog,Animal){
29        STATIC_EX(Dog,Animal);
30};
31static void Woof(Animal *THIS){
32        printf("Woof!My name is %s!\n",THIS->name);
33}
34static int Dog_loadSt(StAnimal *THIS,void *PARAM){
35        THIS->talk=(void *)Woof;
36        return 0;
37}
38ASM_EX(Dog,Animal,NULL,NULL,Dog_loadSt,NULL)
39 
40int main(){
41        Animal *animals[4000];
42        StAnimal *f;
43        int i=0;
44        for(i=0;i<4000;i++)
45        {
46                if(i%2==0) animals[i]=NEW(Dog,"Jack");
47                else animals[i]=NEW(Cat,"Lily");
48        };
49        f=ST(animals[0]);
50        for(i=0;i<4000;++i){
51                f->talk(animals[i]);
52        }
53        for(i=0;i<4000;++i){
54                DELETE0(animals[i]);
55        }
56        return 0;
57}

官方网站:

阅读(1244) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~