#include <stdio.h> #include <stdlib.h> #include <string.h>
struct object { char name[16]; };
struct person { char name[16];
void sleep() { printf("%s is person, he is sleeping\n", this->name); } void study() { printf("%s is person, he is studying\n", this->name); } };
struct dog { char name[16];
void sleep() { printf("%s is dog, he is sleeping\n", this->name); } void bark() { printf("%s is dog, he is barking\n", this->name); } };
#define bless(object, type) ((type*) object)
int main() { struct object * o = (struct object *) malloc(sizeof(struct object)); strcpy(o->name, "tom");
// 先把"tom"变为人
bless(o, person)->sleep(); bless(o, person)->study();
// 再把"tom"变为狗
bless(o, dog)->sleep(); bless(o, dog)->bark();
// 最后,再把"tom"变回人
bless(o, person)->sleep(); bless(o, person)->study(); return 0; }
// 程序运行时输出:
// tom is person, he is sleeping // tom is person, he is studying // tom is dog, he is sleeping // tom is dog, he is barking // tom is person, he is sleeping
|