blob: aa20488d7ef2de95a8a67278c0fe923d9568e843 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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;
}
|