记录C语言的回忆-C语言种的面向思想

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}


猜你喜欢

转载自blog.csdn.net/u010996533/article/details/43030179