1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
   | #include <stdio.h> #include <stdlib.h> #include <string.h>
  struct Animal{     void (*talk)(void *p);     char name[40];     char country[40];     int lifetime;     char flag; };
  struct Bird{     struct Animal an;     int wing; };
  struct Mamal{     struct Animal an;     int id; };
  void talkAnimal(void *Animal){     if (NULL == Animal) {         return ;     }     struct Animal *p = (struct Animal *)Animal;     printf("Animal talk!\n"); }
  void talkBird(void *Bird){     if (NULL == Bird) {         return ;     }     struct Bird *p = (struct Bird *)Bird;     printf("Bird talk!\n"); }
  void talkMamal(void *Mamal){     if (NULL == Mamal) {         return ;     }     struct Mamal *p = (struct Mamal *)Mamal;     printf("Mamal talk!\n"); }
  void talk(void *Animal){     if(NULL == Animal)         return ;     struct Animal *p = (struct Animal *)Animal;     p->talk(Animal); }
  int main() {
      struct Animal a;     struct Bird b;     struct Mamal m;
      strcpy(a.name, "animal");     strcpy(a.country, "world");     a.lifetime = 10;     a.flag = 'A';
      strcpy(b.an.name, "bird");     strcpy(b.an.country, "world");     b.an.lifetime = 30;     b.an.flag = 'B';     b.wing = 2;
      strcpy(m.an.name, "panda");     strcpy(m.an.country, "china");     m.an.lifetime = 30;     m.an.flag = 'P';     m.id = 101;
      printf("oop:\n");     printf("name:%s,country:%s,lifetime:%d,flag:%c\n", a.name, a.country, a.lifetime, a.flag);     printf("name:%s,country:%s,lifetime:%d,flag:%c\n\n", &a.name, &a.country, a.lifetime, a.flag);
      printf("name:%s,country:%s,lifetime:%d,flag:%c,wing:%d\n", b.an.name, b.an.country, b.an.lifetime, b.an.flag, b.wing);     printf("name:%s,country:%s,lifetime:%d,flag:%c,wing:%d\n\n", &b.an.name, &b.an.country, b.an.lifetime, b.an.flag, b.wing);
      printf("name:%s,country:%s,lifetime:%d,flag:%c,ID:%d\n", m.an.name, m.an.country, m.an.lifetime, m.an.flag, m.id);     printf("name:%s,country:%s,lifetime:%d,flag:%c,ID:%d\n\n", &m.an.name, &m.an.country, m.an.lifetime, m.an.flag, m.id);
      a.talk = talkAnimal;     m.an.talk = talkMamal;     b.an.talk = talkBird;
      talk(&a);     talk(&m);     talk(&b);
      return 0; }
   |