0

可能重复:
在基类中打印派生类名称

我正在使用 GCC,下面的代码输出了一些意想不到的东西

#include <iostream>
#include <typeinfo>
using namespace std;

class B {
  public:
  B ( B * ptr) { cout<< typeid(*ptr).name()<<endl;}
};

class  D : public B {
  public:
  D() : B(this) { cout<<typeid(this).name()<<endl;}
};

int main()
{
    D d;
    return 0;
}

输出:

1B
P1D

谁能给我解释一下为什么基类不能正确地告诉派生类的类型?非常感谢

4

2 回答 2

3

两个原因:

  1. 对象 ( *ptr) 尚未完全构造。
  2. 您的类不是多态的(没有虚拟成员函数),因此不存在动态类型信息。
于 2012-07-09T13:04:20.243 回答
0

那件事真的取决于编译器。msvc 为此提供了不同的 typeid 字符串。

于 2012-07-09T14:03:19.857 回答