私は自分の理解のために以下のプログラムを実装しました。しかし、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.
プログラムで指定されているクラス名を期待していました。
どうもありがとう。