OOC-GCC新的测试用例[0.6]

这个例子主要用来掩饰如何实现继承关系[v0.6RC1]

http://code.google.com/p/ooc-gcc/downloads/list

 

 
  
//
#include "inc/core/OOStd.h"
 
CLASS(Human){
    int age;
    int gender;
    STATIC(Human)
    iFn sayHi;
};
ASM(Human,NULL,NULL,NULL,NULL) 
 
CLASS_EX(Human,Mom){    
    STATIC_EX(Human,Mom)  
};
int Mom_sayHi(Mom * THIS){
    printf("Hi,Mom age:%d gender:%s\n",THIS->age,THIS->gender?"male":"female");
    return 0;
} 

int Mom_reload(Mom * THIS,void *PARAM){
    printf("%s %p\n",__func__,THIS);
    THIS->age=36;
    THIS->gender=0;
    return 0;
}
int Mom_unload(Mom * THIS,void *PARAM){
    printf("%s %p\n",__func__,THIS);
    return 0;
}
 
int Mom_reloadStatic(StaticMom * THIS,void *PARAM){
    printf("%s %p\n",__func__,THIS);
    THIS->sayHi=(void *)Mom_sayHi;
    return 0;
}
int Mom_unloadStatic(StaticMom * THIS,void *PARAM){
    printf("%s %p\n",__func__,THIS);
    THIS->sayHi=NULL;
    return 0;
}
ASM_EX(Human,Mom,Mom_reload,Mom_unload,Mom_reloadStatic,Mom_unloadStatic)

CLASS_EX(Mom,Kid){
    int id;
    STATIC_EX(Mom,Kid) 
};

int Kid_sayHi(Kid * THIS){
    printf("Hi,Kid%d age:%d gender:%s\n",THIS->id,THIS->age,THIS->gender?"male":"female");
    return 0;
}

int Kid_reload(Kid * THIS,void *PARAM){
    static int id=0;
    printf("%s %p\n",__func__,THIS);
    THIS->age=3;
    THIS->gender=1;
    THIS->id=++id;
    return 0;
}
int Kid_unload(Kid * THIS,void *PARAM){
    printf("%s %p\n",__func__,THIS);
    return 0;
}
 
int Kid_reloadStatic(StaticKid * THIS,void *PARAM){
    printf("%s %p\n",__func__,THIS);
    THIS->sayHi=(void *)Kid_sayHi;
    return 0;
}
int Kid_unloadStatic(StaticKid * THIS,void *PARAM){
    printf("%s %p\n",__func__,THIS);
    THIS->sayHi=NULL;
    return 0;
}
ASM_EX(Mom,Kid,Kid_reload,Kid_unload,Kid_reloadStatic,Kid_unloadStatic)
 
int main(){
     
    printf("\n-----------\n");
    Mom * m=newMom(NULL);
    printf("\n-----------\n");
    StaticMom *stm=ST(Mom,m);
    Kid *k1=newKid(NULL);
    printf("\n-----------\n");
    Kid *k2=newKid(NULL);
    printf("\n-----------\n");
    Kid *k3=newKid(NULL);
    printf("\n-----------\n");
    stm->sayHi(m);
    printf("\n-----------\n");
    StaticKid *stk=ST(Kid,k1);
    stk->sayHi(k1);
    printf("\n-----------\n");
    stk->sayHi(k2);
    printf("\n-----------\n");
    stk->sayHi(k3);
    printf("\n-----------\n");
    delKid(&k1,NULL);
    printf("\n-----------\n");
    delKid(&k2,NULL);
    printf("\n-----------\n");
    delKid(&k3,NULL);
    printf("\n-----------\n");
    delMom(&m,NULL);
    printf("\n-----------\n");
    
    return 0;
}
正确的输出为,
 
  
-----------
Mom_reloadStatic 003E2BF0
Mom_reload 003E2BD0

-----------
Mom_reload 003E2C18
Mom_reloadStatic 003E2C40
Kid_reloadStatic 003E2C40
Kid_reload 003E2C18

-----------
Mom_reload 003E2C80
Kid_reload 003E2C80

-----------
Mom_reload 003E2CA8
Kid_reload 003E2CA8

-----------
Hi,Mom age:36 gender:female

-----------
Hi,Kid1 age:3 gender:male

-----------
Hi,Kid2 age:3 gender:male

-----------
Hi,Kid3 age:3 gender:male

-----------
Kid_unload 003E2C18
Mom_unload 003E2C18

-----------
Kid_unload 003E2C80
Mom_unload 003E2C80

-----------
Kid_unload 003E2CA8
Kid_unloadStatic 003E2C40
Mom_unloadStatic 003E2C40
Mom_unload 003E2CA8

-----------
Mom_unload 003E2BD0
Mom_unloadStatic 003E2BF0

-----------


Time Elapsed
Seconds : 0
Microseconds : 0
另外内存分配检测Log输出为
[,][;]
+,0x003E2BD0,20;
+,0x003E4CF0,8;
+,0x003E2BF0,32;
+,0x003E2C18,28;
+,0x003E2C40,52;
+,0x003E2C80,28;
+,0x003E2CA8,28;
-,0x003E2C18;
-,0x003E2C80;
-,0x003E2C40;
-,0x003E2CA8;
-,0x003E2BF0;
-,0x003E4CF0;
-,0x003E2BD0;
!,0;
最后的0表示分配的都释放了,而前面的数据可以配合graphviz来实现一些图表
具体文件见项目地址,我一直比较懒,懒得用svn,git这些工具,因为这个目前依旧是自己自娱自乐
P.S.
注意编译时要开启-fms-extensions[GCC 4.5]或-fplan9-extensions[GCC 4.6]

 

转载于:https://www.cnblogs.com/pingf/archive/2011/03/27/1996810.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值