From 26c490f404731d053a6205719b6246502c07b449 Mon Sep 17 00:00:00 2001 From: Patrick Simianer Date: Sat, 14 Jun 2014 16:46:27 +0200 Subject: init --- ccc/ooc.c | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 ccc/ooc.c (limited to 'ccc/ooc.c') diff --git a/ccc/ooc.c b/ccc/ooc.c new file mode 100644 index 0000000..aa20488 --- /dev/null +++ b/ccc/ooc.c @@ -0,0 +1,78 @@ +#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; +} + -- cgit v1.2.3