virtualをつけなくても関数の再定義が出来るのに、どうしてvirtualをつけるんですか?