継承機能のレベルの指定
更新 : 2007 年 11 月
ここでは、以下の機能レベルを CObject の派生クラスに追加する方法について説明します。
ランタイム クラス情報
動的生成機能のサポートを追加するには
シリアル化のサポート
CObject の機能の概要については、「CObject からのクラスの派生」を参照してください。
ランタイム クラス情報を追加するには
「CObject からのクラスの派生」の手順で CObject からクラスを派生します。
クラスの宣言で、DECLARE_DYNAMIC マクロを使用します。次に例を示します。
class CPerson : public CObject { DECLARE_DYNAMIC( CPerson ) // other declarations };
新規クラスの実装ファイル (.CPP) で IMPLEMENT_DYNAMIC マクロを使用します。このマクロでは、クラスとその基本クラスの名前を引数として使用します。
IMPLEMENT_DYNAMIC( CPerson, CObject )
メモ : |
---|
IMPLEMENT_DYNAMIC マクロは、必ず新規クラスの実装ファイル (.CPP) に記述します。IMPLEMENT_DYNAMIC マクロがコンパイル中に 2 回以上評価されてはならないので、インターフェイス ファイル (.H) には記述しないでください。.H ファイルは、複数のファイルにインクルードされる可能性があります。 |
動的生成機能のサポートを追加するには
CObject の派生クラスを作成します。
クラスの宣言に、DECLARE_DYNCREATE マクロを追加します。
引数を持たないコンストラクタ (既定のコンストラクタ) を定義します。
クラスの実装ファイルに、IMPLEMENT_DYNCREATE マクロを追加します。
シリアル化機能のサポートを追加するには
CObject の派生クラスを作成します。
メンバ関数 Serialize をオーバーライドします。
メモ : メンバ関数 Serialize を直接呼び出すとき、つまり、ポリモーフィック ポインタを使わずにオブジェクトをシリアル化するときは、手順 3 から 5 を省略します。
クラスの宣言に、DECLARE_SERIAL マクロを追加します。
引数を持たないコンストラクタ (既定のコンストラクタ) を定義します。
クラスの実装ファイルに、IMPLEMENT_SERIAL マクロを追加します。
メモ : |
---|
"ポリモーフィック ポインタ" は、あるクラス (クラス A) のオブジェクト、またはその派生クラス (クラス B) のオブジェクトを指します。ポリモーフィック ポインタを使ってシリアル化する場合は、シリアル化するオブジェクト (B) のランタイム クラスをフレームワークで判定する必要があります。このオブジェクトは基本クラス (A) からの派生クラスのオブジェクトの場合もあるからです。 |
CObject からの派生クラスでシリアル化する詳細手順については、「MFC のファイル」および「シリアル化」を参照してください。