Я понимаю, что виртуальные методы позволяют производному классу переопределять методы, унаследованные от базового класса. Когда уместно / нецелесообразно использовать виртуальные методы? Не всегда известно, будет ли класс подклассом. Надо ли все делать виртуальным, «на всякий случай»? Или это вызовет значительные накладные расходы?