CObject からのクラスの派生
更新 : 2007 年 11 月
ここでは CObject からクラスを派生するために最低限必要な手順を説明します。シリアル化や診断デバッグのサポートなど、CObject の特定の機能の利用方法については、ほかの CObject クラス関連項目で説明します。
CObject の説明では、"インターフェイス ファイル" と "実装ファイル" という用語を頻繁に使用します。インターフェイス ファイルはヘッダー ファイルまたは .H ファイルとも呼ばれます。このファイルの内容は、クラスの宣言とクラスを使うときに必要な情報です。実装ファイルは .CPP ファイルとも呼ばれます。このファイルの内容は、クラスの定義とメンバ関数の実装コードです。たとえば、CPerson クラスを新規作成するには、インターフェイス ファイル PERSON.H と実装ファイル PERSON.CPP を作成します。ただし、アプリケーション間で共有しない小さなクラスの場合は、インターフェイス ファイルと実装ファイルを 1 つの .CPP ファイルにまとめる方が簡単です。
CObject からクラスを派生するときは、継承する機能を次の 4 つのレベルから選択できます。
基本機能のみ。メモリの診断機能は含まれますが、ランタイム クラス情報とシリアル化機能はサポートされません。
基本機能とランタイム クラス情報のサポート。
基本機能、およびランタイム クラス情報と動的生成のサポート。
基本機能、およびランタイム クラス情報、動的生成、シリアル化のサポート。
再利用を目的としたクラス (後でほかの基本クラスとして使用するクラス) を作成するには、少なくともランタイム クラス情報をサポートする必要があります。また、将来シリアル化を予定している場合は、シリアル化のサポートも必要です。
機能の継承レベルを選択するには、CObject からの派生クラスの宣言および実装において、該当する宣言マクロと実装マクロを使用します。
次の表は、シリアル化およびランタイム クラス情報をサポートするマクロの一覧です。
シリアル化およびランタイム クラス情報用のマクロ
使用するマクロ |
CObject::IsKindOf |
CRuntimeClass:: CreateObject |
CArchive::operator >> CArchive::operator << |
---|---|---|---|
CObject の基本機能 |
× |
× |
× |
DECLARE_DYNAMIC |
○ |
× |
× |
DECLARE_DYNCREATE |
○ |
○ |
× |
DECLARE_SERIAL |
○ |
○ |
○ |
CObject の基本機能だけを使用するには
通常の C++ の構文で、CObject (またはその派生クラス) からクラスを派生します。
次に、CObject からクラスを派生する最も簡単な例を示します。
class CSimple : public CObject { // add CSimple-specific members and functions... };
通常は、CObject のメンバ関数の一部をオーバーライドして派生クラス固有の機能を追加します。たとえば、クラスの内容をデバッグ出力するときは、CObject の関数 Dump をオーバーライドします。Dump のオーバーライド方法については、「オブジェクト ダンプのカスタマイズ」を参照してください。また、クラス オブジェクトのデータ メンバの一貫性を検証するには、CObject の関数 AssertValid をオーバーライドしてテスト方法をカスタマイズします。AssertValid をオーバーライドする方法については、「MFC ASSERT_VALID および CObject::AssertValid」を参照してください。
「継承機能のレベルの指定」では、ランタイム クラス情報、オブジェクトの動的生成、シリアル化などの機能を指定する方法について説明します。