この記事では、 CObject 派生クラスに次のレベルの機能を追加する方法について説明します。
実行時クラス情報
動的生成のサポート
シリアル化のサポート
CObject
機能の一般的な説明については、CObject からのクラスの派生に関する記事を参照してください。
ランタイム クラス情報を追加するには
CObject からのクラスの派生に関する記事の説明に従って、
CObject
からクラスを派生させます。次に示すように、クラス宣言で DECLARE_DYNAMIC マクロを使用します。
class CPerson : public CObject { DECLARE_DYNAMIC(CPerson) // other declarations };
クラスの実装ファイル (.CPP) で IMPLEMENT_DYNAMIC マクロを使用します。 このマクロは、次のように、クラスとその基底クラスの名前を引数として受け取ります。
IMPLEMENT_DYNAMIC(CPerson, CObject)
注
常にあなたのクラスの実装ファイル(.CPP)にIMPLEMENT_DYNAMICを配置してください。 IMPLEMENT_DYNAMIC マクロはコンパイル中に1回だけ評価する必要があるため、複数のファイルに含まれる可能性のあるインターフェイスファイル (.H) では使用すべきではありません。
動的生成のサポートを追加するには
CObject
からクラスを派生させます。クラス宣言で DECLARE_DYNCREATE マクロを使用します。
引数を持たないコンストラクター (既定のコンストラクター) を定義します。
クラス実装ファイルで IMPLEMENT_DYNCREATE マクロを使用します。
シリアル化のサポートを追加するには
CObject
からクラスを派生させます。Serialize
メンバー関数をオーバーライドします。注
Serialize
を直接呼び出す場合、つまり、ポリモーフィック ポインターを介してオブジェクトをシリアル化したくない場合は、手順 3 から 5 を省略します。クラス宣言で DECLARE_SERIAL マクロを使用します。
引数を持たないコンストラクター (既定のコンストラクター) を定義します。
クラス実装ファイルで IMPLEMENT_SERIAL マクロを使用します。
注
"ポリモーフィック ポインター" は、クラスのオブジェクト (A と呼びます) または A から派生した任意のクラスのオブジェクト (B など) を指します。 ポリモーフィック ポインターを介してシリアル化するには、フレームワークがシリアル化するオブジェクト (B) のランタイム クラスを決定する必要があります。これは、何らかの基底クラス (A) から派生した任意のクラスのオブジェクトである可能性があるためです。
CObject
からクラスを派生させるときにシリアル化を有効にする方法の詳細については、「MFC のファイル」および「シリアル化」の記事を参照してください。