用C语言实现多态

#include<stdio.h>

struct animal {
    char* name;
    void (*call)(struct animal *self);
};

typedef struct animal cat, dog;

void cat_call(struct animal *self) {
    printf("%s, 喵喵\n", self->name);
}

void dog_call(struct animal *self) {
    printf("%s, 汪汪\n", self->name);
}

cat* newCat(char *name) {
    cat* instance = (cat*) malloc(sizeof(cat));
    instance->name = name;
    instance->call = cat_call;
    return instance;
}

dog* newDog(char *name) {
    dog* instance = (dog*) malloc(sizeof(dog));
    instance->name = name;
    instance->call = dog_call;
    return instance;
}

int main() {
    struct animal *origin;
    cat* c = newCat("小猫");
    dog* d = newDog("小狗");

    origin = c;
    origin->call(origin);

    origin = d;
    origin->call(origin);
}
posted @ 2021-12-15 21:08  yghr  阅读(107)  评论(0)    收藏  举报