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
から派生したクラス) からクラスを派生させます。次の例は、
CObject
からクラスを派生させる最も単純なケースを示しています。class CSimple : public CObject { // add CSimple-specific members and functions... };
ただし、通常は、CObject
のメンバー関数の一部をオーバーライドして、新しいクラスの詳細を処理することもできます。 たとえば、多くの場合、CObject
の Dump
関数をオーバーライドして、クラスの内容のデバッグ出力を提供できます。 Dump
をオーバーライドする方法の詳細については、「Object Dump Customization」を参照してください。 また、CObject
の AssertValid
関数をオーバーライドして、カスタマイズされたテストを提供し、クラス オブジェクトのデータ メンバーの一貫性を検証することもできます。 AssertValid
をオーバーライドする方法の詳細については、「MFC ASSERT_VALID と CObject::AssertValid」を参照してください。
「継承機能のレベルの指定」では、ランタイム クラス情報、動的オブジェクト作成、およびシリアル化など、その他のレベルの機能を指定する方法が説明されています。