这几天又仔细研究了下 C OOP ,有点新的结果,在这分享下,下面大概说下.
Inherit(继承)
代码如下 | 复制代码 |
#define CB_CLASS_INHERIT_BEGIN(THIS, PARENT_CLASS)struct THIS {PARENT_CLASS super;#define CB_CLASS_INHERIT_END() };#define CB_CLASS_POINTER_SET_PARENT(THIS, name, value) ((THIS) - >super) - >name = value;#define CB_CLASS_SET_PARENT(THIS, name, value) ((THIS).super).name = value; typedef struct _Base Base; struct _Base { int a; }; typedef struct _Child Child; CB_CLASS_INHERIT_BEGIN(_Child, Base) /**< _Child继承Base结构体 */ int b; int c; CB_CLASS_INHERIT_END() int main(int argc, char * argv[]) { Child m; CB_CLASS_SET_PARENT(m, a, 5); m.b = 3; printf("Parent a=%d,Child b=%dn", m.super.a, m.b); return 0; } |
Template(模板)
代码如下 | 复制代码 |
/* — Struct Template — */ < pre > #define TplTest(T)struct _test {T a; }; /* — Function Template — */ #define TplTestFun(T)T testFun() {T a = 0; return a; } int main(int argc, char * argv[]) { TplTest(char * ); struct _test obj; obj.a = "This is a String"; TplTestFun(int); printf("%s,%dn", obj.a, testFun()); return 0; } |
Polymorphism(多态)
C多态机制主要是实现类似C++的虚函数表
代码如下 | 复制代码 |
#include < Akita / Akita.h > typedef struct _Base Base; typedef struct _BaseVt BaseVt; typedef struct _Child Child; typedef struct _ChildVt ChildVt;#define GetVt(p, type)((type * )(void * ) p) - >vt#define BaseShow(p) GetVt(p, BaseVt).doSomething((Base * ) p);#define ChildShow(p) GetVt(p, ChildVt).doAnthing((Child * ) p); void displayBase(); void displayChild(); void justDoIt(); /* — Base — */ struct _Base { void( * doSomething)(Base * p); /**< Function Pointer */ }; struct _BaseVt { Base vt; }; /* — Child — */ CB_CLASS_INHERIT_BEGIN(_Child, Base); /< Inherit */void( * doAnthing)(Child * p); CB_CLASS_INHERIT_END(); struct _ChildVt { Child vt; }; /* — Base Init — */ void InitBase(BaseVt * *p) { * p = (BaseVt * ) malloc(sizeof(BaseVt)); ( * p) - >vt.doSomething = displayBase; } /* — Child Init — */ void InitChild(ChildVt * *p) { * p = (ChildVt * ) malloc(sizeof(ChildVt)); ( * p) - >vt.super.doSomething = displayChild; ( * p) - >vt.doAnthing = justDoIt; } void displayBase() { printf("%sn", "I’m Base"); } void displayChild() { printf("%sn", "I’m Child"); } void justDoIt() { printf("%sn", "I’m Child ,do anything"); } int main(int argc, char * argv[]) { BaseVt * p; InitBase( & p); BaseShow(p); InitChild((Child * *) & p); BaseShow(p); ChildShow(p); return 0; } |
电神魔傀2街机免费版 官方版v1.2.1
下载三国战纪2手游腾讯渠道服 安卓版v2.41.0.0
下载三国战纪2手游抖音渠道服 安卓版v2.41.0.0
下载三国战纪2折扣服 安卓版v2.41.0.0
下载叫我大掌柜小米版 安卓版v7.4.4
叫我大掌柜小米版是这款模拟经营类手游的渠道服版本,在此版本中
cooking fever正版 安卓最新版v23.0.2
cooking fever正版是一款非常好玩的模拟经营类手游
咖啡厅的生活故事 最新版v1.7
咖啡厅的生活故事是一款模拟经营游戏,玩家们在游戏中可以经营一
迅猛龙模拟器金币不减反增版 v1.1.8
迅猛龙模拟器无限金币版是一款动物模拟类游戏,玩家们将在游戏中
泽塔奥特曼升华器免广告版 v1.4
泽塔奥特曼升华器去广告版是游戏的破解版本,在该版本中为玩家去