some work
[svn/Cll1h/.git] / demos / objects / objects-wiki.c
CommitLineData
097bac9a 1#include <cll1.h>
2
3/* This is C<<1 rewrite of object polymorphism from
4 http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming */
5
6struct Animal
7{
8 use_interface(AnimalActions);
9 char *name;
10};
11
12struct AnimalActions
13{
14 const char *(method(talk));
15}
16
17struct *Animal get_animal(char *name, struct AnimalActions *interface)
18{
19 struct *Animal animal=get_object(Animal,interface);
20 animal->name=name;
21 return animal;
22}
23
24const char *cat_talk(void *_self)
25{
26 return "Meow!";
27}
28
29const char *dog_talk(void *_self)
30{
31 return "Arf! Arf!";
32}
33
34interface_implementation(CatActions,AnimalActions)
35{
36 bind_method(talk,cat_talk);
37}
38
39interface_implementation(DogActions,AnimalActions)
40{
41 bind_method(talk,dog_talk);
42}
43
44program
45{
46 int i;
47 struct Animals *animal[3];
48 struct AnimalActions *cat = get_interface(CatActions);
49 struct AnimalActions *dog = get_interface(DogActions);
50
51 animal[0]=get_animal("Missy",cat);
52 animal[0]=get_animal("Mr. Bojangles",cat);
53 animal[0]=get_animal("Lassie",dog);
54
55 for_range(i,0,2)
56 printf("%s: %s\n",animal[i].name,(_(animal[i],talk)));
57
58}
This page took 0.596336 seconds and 4 git commands to generate.