foo
function is called in class a
's constructor, and at that time, object b
has not been fully constructed yet, hence it's foo
implementation is unavailable.
Quoted from "Effective C++":
Don't call virtual functions during construction or destruction,
because such calls will never go to a more derived class than that of
the currently executing constructor or destructor