Function f1 is never overriden. Even after handle assignment base object is made to call f1 which is only in base class which displays ADD_FUNCTION.Instead f2 write f1 in extended class for polymorphism.
You achieve polymorphism by redefining ( read : overriding ) the behavior (read: method) of the base/super class.
Here if you are trying to redefine/override the behavior (f1) of the class C1, you will have to override the same behavior ( f1 ) in the extended class.