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 機能を使用するには

  1. 通常の C++ 構文を使用して、CObject (または CObject から派生したクラス) からクラスを派生させます。

    次の例は、CObject からクラスを派生させる最も単純なケースを示しています。

    class CSimple : public CObject
    {
       // add CSimple-specific members and functions...
    };
    

ただし、通常は、CObject のメンバー関数の一部をオーバーライドして、新しいクラスの詳細を処理することもできます。 たとえば、多くの場合、CObjectDump 関数をオーバーライドして、クラスの内容のデバッグ出力を提供できます。 Dump をオーバーライドする方法の詳細については、「Object Dump Customization」を参照してください。 また、CObjectAssertValid 関数をオーバーライドして、カスタマイズされたテストを提供し、クラス オブジェクトのデータ メンバーの一貫性を検証することもできます。 AssertValid をオーバーライドする方法の詳細については、「MFC ASSERT_VALID と CObject::AssertValid」を参照してください。

継承機能のレベルの指定」では、ランタイム クラス情報、動的オブジェクト作成、およびシリアル化など、その他のレベルの機能を指定する方法が説明されています。

関連項目

CObject の使い方