#pragma once
/**//*super.h*/
typedef int (*getValue)(void *);
typedef struct CSuper_t...{
void *body;
getValue GetValue;
}CSuper;
#define Super_GetValue(n) (n->super.GetValue)(n->super.body);

/**//*sub1.h*/
#include "super.h"
/**//* クラス宣言 */
typedef struct CSub1_t...{
CSuper super;
int value1;
}CSub1;

/**//*初期化関数*/
extern void Sub1_Initial(CSub1*);
/**//*ゲット関数*/
extern int Sub1_GetValue(CSub1*);

/**//*sub2.h*/
#include "super.h"
/**//* クラス宣言 */
typedef struct CSub2_t...{
CSuper super;
int value2;
}CSub2;

/**//*初期化関数*/
extern void Sub2_Initial(CSub2*);
/**//*ゲット関数*/
extern int Sub2_GetValue(CSub2*);

/**//*sub1.c*/
#include "sub1.h"
void Sub1_Initial(CSub1* this)
...{
this->super.body = this;
this->super.GetValue = Sub1_GetValue;
this->value1 = 100;
//return &(this->super);
}
int Sub1_GetValue(CSub1* this)
...{
return this->value1;
}

/**//*sub2.h*/
#include "super.h"
/**//* クラス宣言 */
typedef struct CSub2_t...{
CSuper super;
int value2;
}CSub2;

/**//*初期化関数*/
extern void Sub2_Initial(CSub2*);
/**//*ゲット関数*/
extern int Sub2_GetValue(CSub2*);

/**//*sub2.c*/
#include "sub2.h"
void Sub2_Initial(CSub2* this)
...{
this->super.body = this;
this->super.GetValue = Sub2_GetValue;
this->value2 = 200;
//return &(this->super);
}
int Sub2_GetValue(CSub2* this)
...{
return this->value2;
}

/**//*main.c*/
#include "sub1.h"
#include "sub2.h"
#include "super.h"
CSub1 mSub1;
CSub1 *pSub1;
CSub2 mSub2;
CSub2 *pSub2;
CSuper *pSuper;
void main()...{
int s1=0;
int s2=0;
pSub1 = &mSub1;
pSub2 = &mSub2;
Sub1_Initial(pSub1);
s1 = Super_GetValue(pSub1);
Sub2_Initial(pSub2);
s2 = Super_GetValue(pSub2);
}
super是IF类,有一个函数指针成员,还有就是宏,就是用这个宏实现多态的哦
sub在初期化的时候要给继承super的函数指针成员一个函数地址
4723

被折叠的 条评论
为什么被折叠?



