2012-07-09 2 views
0

가능한 중복 :
Printing derived class name in base class유형 ID 인쇄되지 정보

나는 예상치 못한 다음 코드 출력 뭔가를 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 

누구든지 제게 여기 왜 기본 클래스가 파생 클래스의 유형을 정확하게 말할 수 없습니까? 많은 감사

+0

참조 : http://stackoverflow.com/q/10894683/1025391 – moooeeeep

답변

3

두 가지 이유 :

  1. 개체 (*ptr)가 아직 완전히 구성되지 않았습니다.
  2. 클래스가 다형성 (가상 멤버 함수 없음)이 없으므로 동적 유형 정보가 없습니다.
+0

그러나 컴파일 타임에 typeid 정보를 알고 있지 않습니까? 컴파일 타임에 알았 으면 런타임에 파생 클래스 이름을 인쇄해야합니다. – leorex

+0

@lorex :'* ptr'의 동적 타입은 컴파일시에 알려지지 않습니다. 아직 완벽하게 구축되지 않았습니다. –

+0

이제 알겠습니다. 많은 감사 – leorex

0

그 것은 정말로 컴파일러에 달려 있습니다. msvc는 다른 typeid 문자열을 제공합니다.