Each object maintains a pointer to a table, called the virtual method table.
Virtual methods are identified by a fixed address in this table.
A method call, such as
A.foo(B, C)
is translated into
(* A.virTable[idx])(A, B, C)