One way to crack a limited form of polymorphism in C is to do something like this:
typedef struct {
int x;
} base;
typedef struct {
base super;
int y;
} derived;
Now you can refer to the derived instance as the base instance, depending on how the variable changes, i.e.:
derived my_derived;
my_derived.y = 10;
my_derived.super.x = 20;
//will print 10
printf("%d", (&my_derived)->y);
//will print 20
printf("%d", ((base*)(&my_derived) )->x);
So my question is: how exactly does this work? Is it because when you use it as a base and refer to a variable, do you refer to int member 'x' as an offset from the beginning of the base structure? This is the only thing I can think of, any help would be appreciated.
Thanks a lot!
source
share