Для собственного понимания я реализовал приведенную ниже программу. Но я вижу, что имя класса, возвращаемое typeid, немного изменено. Я знал, что это могло быть из-за искажения имени, но включение extern C тоже не помогает.
Может ли кто-нибудь помочь мне понять, почему такое поведение, а также как его исправить?
версия g ++ - 4.7.0
#include <iostream>
#include <typeinfo>
using namespace std;
class Base
{
public:
virtual ~Base(){}
};
class Derive : public Base
{
public:
~Derive(){}
};
class newBase
{
public:
~newBase(){}
};
class newDerive : public newBase
{
public:
~newDerive(){}
};
int main()
{
Base base;
Derive derive;
Base *pBase;
Base & rBase1 = base;
Base & rBase2 = derive;
newBase newbase;
newDerive newderive;
newBase *pNewBase;
//Results with polymorphic class.
pBase = &base;
cout<<"Base class pointer pBase contains object of type "<<typeid(*pBase).name() <<".\n";
pBase = &derive;
cout<<"Base class pointer pBase contains object of type "<<typeid(*pBase).name()<<".\n";
cout<<"\nReference variable rBase1 referring to "<<typeid(rBase1).name()<<".\n";
cout<<"Reference variable rBase2 referring to "<<typeid(rBase2).name()<<".\n";
//Results with non-polymorphic class.
pNewBase = &newbase;
cout<<"\nBase class pointer pNewBase contains object of type "<<typeid(*pNewBase).name()<<".\n";
pNewBase = &newderive;
cout<<"Base class pointer pNewBase contains object of type "<<typeid(*pNewBase).name()<<".\n";
return 0;
}
Output -
Base class pointer pBase contains object of type 4Base.
Base class pointer pBase contains object of type 6Derive.
Reference variable rBase1 referring to 4Base.
Reference variable rBase2 referring to 6Derive.
Base class pointer pNewBase contains object of type 7newBase.
Base class pointer pNewBase contains object of type 7newBase.
Я ожидал, что имя класса будет указано в программе.
Большое спасибо.