CObject からのクラスの派生
ここでは 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」を参照してください。
「継承機能のレベルの指定」では、ランタイム クラス情報、オブジェクトの動的生成、シリアル化などの機能を指定する方法について説明します。