From 258e1b92ebbfdebefabc120969ab87c3d8b75c3d Mon Sep 17 00:00:00 2001 From: Patrick Simianer Date: Sun, 15 Jun 2014 03:50:12 +0200 Subject: old c,cc examples --- c,cc/ooc.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 c,cc/ooc.c (limited to 'c,cc/ooc.c') diff --git a/c,cc/ooc.c b/c,cc/ooc.c new file mode 100644 index 0000000..aa20488 --- /dev/null +++ b/c,cc/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