6

C++ のランタイム型制御とは何ですか?

4

5 に答える 5

4

これにより、実行時にオブジェクトの動的タイプを識別できます。例えば:

class A
{
   virtual ~A();
};

class B : public A
{
}

void f(A* p)
{
  //b will be non-NULL only if dynamic_cast succeeds
  B* b = dynamic_cast<B*>(p);
  if(b) //Type of the object is B
  {
  }
  else //type is A
  { 
  }
}

int main()
{
  A a;
  B b;

  f(&a);
  f(&b);
}
于 2009-09-11T09:23:17.167 に答える
4

これは dynamic_cast だけではなく、RTTI 全体がその一部です。RTTI について学ぶのに最適な場所は、Bjarne Stroustrup によるC++ プログラミング言語のセクション 15.4 です。

于 2009-09-11T09:41:51.350 に答える
2

これの正しい名前はRun-time type information (RTTI)です。

于 2009-09-11T09:33:04.353 に答える
2

これはdynamic_cast機能です。コードは、指定されたポインターまたは参照が期待する型のオブジェクトに実際にバインドされているかどうかを実行時に検出できます。

于 2009-09-11T09:19:23.980 に答える
0

Interface* を使用して、ポインターが指すオブジェクトのタイプを c++ に「尋ねる」ことができます。私の知る限り、これは実行時のメタ情報に依存しており、そのような情報の保存と検索には数サイクルが必要です。

「typeid」キーワードを見てください。それは最も魔法を提供します。

dynamic_castはRTTIのみを使用し、std::type_info のtypeidは「本物」のように思えます。

于 2009-09-11T11:58:16.267 に答える