这是一个模板,是一些宏的集合,针对跨平台的GCC设计[0.11版以后的与VC9编译器兼容]
只用纯粹的C实现简单的OO的机制而不必了解冗杂的C++的语法,
其实现了简单的”类”的模拟,析构与构造,以及对单根继承的模拟.
在很大程度上,可以模拟完成大部分OO中较为重要的特性.
另有简化版ooc-lite( http://code.google.com/p/ooc-lite/ )及相关文档,
提供测试实例及设计思路详解.
假定有一个名为"A"的"类" CLASS(A){ ...... 这里为实例成员 STATIC(A); ...... 这里是类成员(实际结构体为struct _StA,并被重定义为StA) }; 假定有一个名为"B"的继承了上面"B"的"类" CLASS_EX(A,B){ ....... STATIC_EX(A,B) ; ....... }; 注意继承时,前面是父类,后面是要定义的子类.
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的析构