RTTI

#include <iostream>
#include <typeinfo>
#include <cxxabi.h>
using namespace std;

class Base {
    public :
    virtual void Test(){}
    int a;
};


class Sub : public Base {
public :
    virtual void Test(){}
    int b;
};

#define class_name( X ) demangle( typeid(X).name() )
std::string demangle( const char* str){
    int status;
    return abi::__cxa_demangle( str , 0,0,&status );
}

int main(){
    Base* pBase = new Sub;
    int i;
    int status;
    cout << class_name( status ) << endl;
    cout << class_name( pBase )  << endl;
    cout << class_name( *pBase ) << endl;
    return 0;

}