Узнать никак не выдет, в С++ нет поддержки описания классов
Есть RTTI, но сервисов там минимум
Можно проверить унаследован ли данный обьект от определенного класса, есть два способа:
Первый способ - во время работы программы
class A
{
public:
virtual ~A() {}
};
class B : public A {};
class C
{
public:
virtual ~C() {}
};
void Test()
{
A a;
B b;
C c;
A* ptr;
ptr = dynamic_cast<A*>(&a);
// пытаемся безопасно привести &a к типу A*
assert( ptr != null );
// ptr != null, т.к. &a можно привести к A*
ptr = dynamic_cast<A*>(&b);
// пытаемся безопасно привести &b к типу A*
assert( ptr != null );
// ptr != null, т.к. &b можно привести к A*
// потому что B унаследован от A
ptr = dynamic_cast<A*>(&c);
// пытаемся безопасно привести &c к типу A*
assert( ptr != null ); // ошибка !!!
// ptr == null, т.к. &c не возможно привести к A*
// потому что С не наследует от A
}
использовать можно как указатели так и ссылки
A& ref = dynamic_cast<A&>(a);
assert( &ref != null );
Воторой способ - это проверка на этапе компиляции
вместо dynamic_cast используем static_cast
ptr = static_cast<A*>(&c);
// пытаемся безопасно привести &c к типу A*
в данном случае компилятор выдаст ошибку