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