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

2 つの理由:

  1. オブジェクト ( *ptr) はまだ完全に構築されていません。
  2. クラスはポリモーフィックではない (仮想メンバー関数がない) ため、動的な型情報は存在しません。
于 2012-07-09T13:04:20.243 に答える
0

そのことは本当にコンパイラに依存します。msvc は、そのための別の typeid 文字列を提供します。

于 2012-07-09T14:03:19.857 に答える