Чтобы немного проработать / прояснить, «хорошее» время для использования абстрактного интерфейса (например, базовый класс с виртуальными функциями) - это когда практически все функциональные возможности, которые будут использоваться на объектах, могут содержаться в виртуальных функциях.Если это так, вы можете легко делать то, что предлагаете, и просто вызывать виртуальные функции по указателю базового класса, который автоматически вызовет предоставленную версию, наиболее производную.
Если вам понадобитсячасто опускать руки, чтобы получить доступ к специфическим функциям / данным детского класса, этот подход, вероятно, не оптимален для вашей ситуации.В этом случае вы можете написать некоторые функциональные возможности вне классов, предоставить несколько реализаций для каждого типа и использовать какой-то RTTI, чтобы при необходимости уменьшить значение.Это более грязно, но, как правило, чаще встречается за пределами «академического» или хорошо изолированного использования.
Похоже, у вас есть много полезной информации / советов в других ответах.