#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; }