In reply to verif_learner:
I said that the call to func2 was bound at compile time because it was declared as a non-virtual method. Your case 5 has it declared as a virtual method. You are forgetting that once declared virtual, all overrides remain virtual.