Можно ли как-то в c++ узнать принадлежность объекта классу?
Зачем вам это? Есть полиморфизм, а касты -- это плохой стиль почти всегда.
Можно много чего использовать, в том числе и тэги. В базовом классе создаёте перечисление, где каждый элемент -- тип наследника + 1 элемент на тип базового класса. В базовом классе определяете виртуальный метод вроде type() и реализуете его для всех наследников.
Но перед тем, как сделать это, хорошо подумайте над тем, надо ли оно вам. Про SOLID почитайте, в особенности про букву L.
Почитайте например вот это:
https://stackoverflow.com/questions/1986418/typeid...
особенно ответ.
Где то видел еще реализацию через темплейты.
Но 90% что чт то не так с архитектурой раз такое надо. И если уж надо и наследуетесь от базового класса - то сделайте в базовом классе метод, который вернет тип по enum.