C语言实现类cpp的类


基于函数指针实现的成员函数,通过struct嵌套实现简单继承派生和多态。

#include<stdio.h>
#include<stdlib.h>
// 伪类
typedef struct _Class Class;
struct _Class{
    int data;
    int (*f)(Class* self);
};

// 成员函数
// 原始方法手工传this指针
int f(Class * self) {
    return self->data;
}
/*  ------  构造函数  ----  */
// C不像go不支持堆栈逃逸没法返回栈上类
// 本函数只修改值不分配空间
void InitClass(Class *c,int data){
    c->data = data;
    c->f=f;
}
// 本函数既分配空间又修改值
Class* NewClass(int data){
    Class* c=(Class*)malloc(sizeof(Class));
    if (c != NULL){
        InitClass(c,data);
        printf("Create Class successfully!\n");
    }
    return c;
}
/*  ------  析构函数  ----  */
void DeleteClass(Class* c){
    if(c==NULL){
        return;
    }
    free(c);
    c=NULL;
    return;
}
/*  ------  简单继承(可能不太安全)  ----  */
// 简单的SonClass继承Class
typedef struct SonClass{
    Class super;
    int newdata;
}SonClass;

SonClass* NewSonClass(int olddata,int newdata){
    SonClass*son=(SonClass*)malloc(sizeof(SonClass));
    InitClass(&son->super,olddata);
    son->newdata=newdata;
    return son;
}
int main(){
    // 调用成员函数
    Class* c = NewClass(1111);
    printf("%d\n",c->f(c));
    DeleteClass(c);

    // 继承+多态 父类class指针指向子类sonclass指针
    SonClass* son = NewSonClass(2222,3333);
    Class* cs = (Class*)son;
    printf("%d\n",son->super.f(&son->super));
    printf("father's data:%d\tson's data:%d\n",cs->f(cs),son->newdata);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章