Branch prediction of Virtual Calls has traditionally been to look at the address of the calling instruction, and assume it will be the same target as last time.
But the real penalty for using Virtual Calls is the potential loss of inlining. It depends on how smart your compiler is.