diff options
Diffstat (limited to 'ccc/ooc.c')
-rw-r--r-- | ccc/ooc.c | 78 |
1 files changed, 0 insertions, 78 deletions
diff --git a/ccc/ooc.c b/ccc/ooc.c deleted file mode 100644 index aa20488..0000000 --- a/ccc/ooc.c +++ /dev/null @@ -1,78 +0,0 @@ -#include "ooc.h" -#include "stdio.h" -#include "string.h" - - -struct van { - struct vehicle base; - int cubic_size; -}; - -struct bus { - struct vehicle base; - int seats; -}; - -struct van* -make_van() -{ - struct van* v = malloc(sizeof(struct van)); - v->base.type = "van"; - v->cubic_size = 12; - return v; -} - -struct bus* -make_bus() -{ - struct bus* v = malloc(sizeof(struct bus)); - v->base.type = "bus"; - v->seats=112; - return v; -} - -struct vehicle* -make_vehicle(const char* type) -{ - if(!strcmp(type, "van")) return make_van(); - if(!strcmp(type, "bus")) return make_bus(); - return NULL; -} - -void -do_something_with_a_bus(struct vehicle* v) -{ - ((struct bus*)v)->seats = 13; -} - -void -do_something_with_a_van(struct vehicle* v) -{ - ((struct van*)v)->cubic_size = 11; -} - -void -do_something(struct vehicle* v) -{ - if(!strcmp(v->type, "van")) return do_something_with_a_van(v); - if(!strcmp(v->type, "bus")) return do_something_with_a_bus(v); -} - -int -main(void) { - struct van my_van; - struct vehicle *something = &my_van; - my_van.cubic_size = 100; - my_van.base.power = 99; - printf("%d\n", something->power); - printf("%d\n", my_van.base.power); - - struct bus* bus = make_vehicle("bus"); - printf("%s\n", bus->base.type); - printf("%d\n", bus->seats); - do_something(bus); - printf("%d\n", bus->seats); - - return 0; -} - |