版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010996533/article/details/43030179
主要利用C语言的结构体,来模拟C++中类的继承。
直接上代码理解:
#include <stdio.h>
#include <stdlib.h>
#define ObjectField \
void(*onDelete)(void*); //宏定义函数指针
//定义父类结构体
typedef struct Object{
ObjectField
}Object;
#define ObjectCreate(TYPE) malloc(sizeof(TYPE))
#define ObjectDelete(obj){\
obj->onDelete(obj);\
free(obj);\
}
void ObjectOnDelete(void *obj)
{
printf("Object on Delete\n");
}
Object* ObjectInit(Object *obj){
obj->onDelete = ObjectOnDelete;
return obj;
}
typedef struct{
ObjectField //继承Obj结构体
int age;
void (*SayHello)();//C语言结构体调用函数
}People;
void PeopleSayHello(){
printf("Hello\n");
}
void PeopleOnDelete(void *p)
{
ObjectOnDelete(p);
printf("Pepple on Delete\n");
}
People* PeopleInit(People *p,int age)
{
ObjectInit((Object*)p);
p->age = age;
p->SayHello = PeopleSayHello;
p->onDelete = PeopleOnDelete;
return p;
}
int main(int argc, const char * argv[]) {
People *p = PeopleInit(ObjectCreate(People),20);
p->SayHello();
//PeopleOnDelete(p);
ObjectDelete(p);
return 0;
}