継承機能のレベルの指定

この記事では、CObject 派生クラスに次のレベルの機能を追加する方法について説明します:

  • ランタイム クラス情報

  • 動的生成のサポート

  • シリアル化のサポート

CObject 機能の一般的な説明については、CObject からのクラスの派生のアーティクルを参照してください。

ランタイム クラス情報を追加するには

  1. CObject からのクラスの派生のアーティクルで説明したように、CObject からクラスを派生させます。

  2. クラス宣言の中で、以下のように DECLARE_DYNAMIC マクロを使用します:

    class CPerson : public CObject
    {
       DECLARE_DYNAMIC(CPerson)
    
       // other declarations
    };
    
  3. クラスの実装ファイル (.CPP) で IMPLEMENT_DYNAMIC マクロを使用します。 このマクロは、次のようにクラス名とその基底クラスを引数にとります:

    IMPLEMENT_DYNAMIC(CPerson, CObject)
    

Note

クラスの実装ファイル (.CPP) には、必ず IMPLEMENT_DYNAMIC を入れてください。 IMPLEMENT_DYNAMIC マクロはコンパイル時に 1 回だけ評価されるため、複数のファイルでインクルードされる可能性のあるインターフェース ファイル (.H) では使用しないでください。

動的生成のサポートを追加するには

  1. CObject からクラスを派生させます。

  2. クラス宣言で、DECLARE_DYNCREATE マクロを使用します。

  3. 引数を持たないコンストラクター (既定のコンストラクター) を定義します。

  4. クラス実装ファイルで、IMPLEMENT_DYNCREATE マクロを使用します。

シリアル化のサポートを追加するには

  1. CObject からクラスを派生させます。

  2. Serialize メンバー関数をオーバーライドします。

    Note

    Serialize を直接呼び出す場合、つまり、ポリモーフィック ポインターを介してオブジェクトをシリアル化したくない場合は、手順 3 から 5 を省略します。

  3. クラス宣言で、DECLARE_SERIAL マクロを使用します。

  4. 引数を持たないコンストラクター (既定のコンストラクター) を定義します。

  5. クラス実装ファイルで、IMPLEMENT_SERIAL マクロを使用します。

Note

"ポリモーフィック ポインター" は、クラスのオブジェクト (A と呼ばれる) または A から派生した任意のクラスのオブジェクト (B など) を指します。 ポリモーフィック ポインターを介してシリアル化する場合、フレームワークはシリアル化するオブジェクトの実行時クラス (B) を決定する必要があります。これは、一部の基底クラス (A) から派生した任意のクラスのオブジェクトである可能性があるからです。

CObject からクラスを派生するときにシリアル化を有効にする方法の詳細は、MFC でのファイルシリアル化を参照してください。

関連項目

CObject からのクラスの派生