当前位置:  软件>C/C++软件

OOC-GCC

    来源:    发布时间:2015-01-10

    本文导语:  这是一个模板,是一些宏的集合,针对跨平台的GCC设计[0.11版以后的与VC9编译器兼容] 只用纯粹的C实现简单的OO的机制而不必了解冗杂的C++的语法, 其实现了简单的"类"的模拟,析构与构造,以及对单根继承的模拟. 在很大程度上,可以...

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

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

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

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

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

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

关于OOC-GCC中宏的使用 类的设计(模块化的编程应在.h文件中使用)
 
假定有一个名为"A"的"类"

CLASS(A){
    ......  这里为实例成员
    STATIC(A);
    ......  这里是类成员(实际结构体为struct _StA,并被重定义为StA)
};

假定有一个名为"B"的继承了上面"B"的"类"

CLASS_EX(A,B){
    .......
    STATIC_EX(A,B) ;
    .......
};

注意继承时,前面是父类,后面是要定义的子类.
类的构造与析构(模块化的编程应在.c文件中使用)
static int A_reload(A *THIS,void *p){
        THIS->.... 这里使用第一个参数来初始化实例成员
        return 0;
}
static int A_reloadSt(StA *THIS,void *p){
        THIS->.... 这里使用第一个参数来初始化类成员
        return 0;
}
static int A_unload(A *THIS,void *p){
        THIS->.... 这里使用第一个参数来析构实例成员
        return 0;
}
ASM(A,A_reload,A_unload,A_reloadSt,NULL)
注意上面最后一个参数为类成员的析构
使用NULL是为了说明无需某个函数时,可以不设置
类的使用
普通类"A"的使用
A *a=NEW0(A);  //声明第一个A的实例时调用StA和A的构造,
               //以后再声明A的实例只调用A的构造
StA *fA=ST(a);
fA->someFunc(a,someParam);
DEL0(a);       //销毁A的实例时调用A的析构
               //当销毁显存的最后一个A的实例时,
               //调用A和StA的构造

带有继承的类"B"的使用
B *b=NEW0(B);   //注意父类的构造会自动调用
StB *fB=ST(b);
fB->someFunc(b,someParam);
StA *fA=ST(b);
fA->someFunc(b,someParam); 使用父类的方法
DELETE0(b);  //无需知道b的具体类型时A或B,都会调用正确的析构
          //如果是A的指针,则调用A的析构,如果是B的指针则调用B和A的析构

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3