#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);
}