C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++のRTTI(実行時型情報)


このセクションでは、C ++のRTTI(実行時型情報)とは何かを説明します。 C ++では、RTTIはメカニズムであり、実行時にオブジェクトのデータ型に関する情報を公開します。この機能は、クラスに少なくとも1つの仮想関数がある場合にのみ使用できます。これにより、プログラムの実行時にオブジェクトのタイプを判別できます。

次の例では、最初のコードは機能しません。 「(Base *型の)dynamic_castbase_ptrを「classDerived*」と入力することはできません(ソース型はポリモーフィックではありません)」のようなエラーが生成されます。このエラーは、この例には仮想関数がないために発生します。

サンプルコード

#include<iostream>
using namespace std;
class Base { };
class Derived: public Base {};
int main() {
   Base *base_ptr = new Derived;
   Derived *derived_ptr = dynamic_cast<Derived*>(base_ptr);
   if(derived_ptr != NULL)
      cout<<"It is working";
   else
      cout<<"cannot cast Base* to Derived*";
   return 0;
}

これで、仮想メソッドを追加した後、機能します。

サンプルコード

#include<iostream>
using namespace std;
class Base {
   virtual void function() {
      //empty function
   }
};
class Derived: public Base {};
int main() {
   Base *base_ptr = new Derived;
   Derived *derived_ptr = dynamic_cast<Derived*>(base_ptr);
   if(derived_ptr != NULL)
      cout<<"It is working";
   else
      cout<<"cannot cast Base* to Derived*";
   return 0;
}

出力

It is working

  1. C++での基本クラスと派生クラスの例外のキャッチ

    基本クラスと派生クラスの両方の例外をキャッチするには、派生クラスのcatchブロックを基本クラスの前に配置する必要があります。そうしないと、派生クラスのキャッチブロックに到達しません。 アルゴリズム Begin    Declare a class B.    Declare another class D which inherits class B.    Declare an object of class D.    Try: throw derived.    Catch (D der

  2. C++のローカルクラス

    関数内で宣言されたクラスは、その関数に対してローカルであるため、C++ではローカルクラスと呼ばれます。 ローカルクラスの例を以下に示します。 #include<iostream> using namespace std; void func() {    class LocalClass {    }; } int main() {    return 0; } 上記の例では、func()は関数であり、クラスLocalClassは関数内で定義されています。したがって、ローカルクラスとして知られています。 ローカルクラ