문제

Possible Duplicate:
Printing derived class name in base class

I am using GCC, and the following code output something unexpected

#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;
}

output:

1B
P1D

Can anyone please explain to me why here the base class cannot tell the type of the derived class correctly? Many thanks

도움이 되었습니까?

해결책

Two reasons:

  1. The object (*ptr) hasn't been fully constructed yet.
  2. Your classes are not polymorphic (no virtual member functions), so no dynamic type information exists.

다른 팁

that thing really depends on compiler. msvc provides different typeid string for that.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top