How does this object stuff work?
The recipe for the compiler:
To call GetVolume(): to where the pointer points to , add 1 and call the routine this location points to.
To call GetSurface(): to where the pointer points to, add 2 and call the routine which this location points to.
All the compiler needs to know is that at the locations pointed to it will find the appropriate routines to call. It doesn’t need to know what those routines do or how they do it, only what the recipe is.