从 CObject 派生类

本文介绍从 CObject 派生类至少需要的步骤。 其他 CObject 类文章介绍了利用特定 CObject 功能(如序列化和诊断调试支持)所需的步骤。

CObject 的讨论中,经常使用术语“接口文件”和“实现文件”。 接口文件(通常称为头文件,或 .H 文件)包含类声明和使用该类所需的任何其他信息。 实现文件(或 .CPP 文件)包含类定义以及实现类成员函数的代码。 例如,对于名为 CPerson 的类,通常创建一个名为 PERSON.H 的接口文件和名为 PERSON.CPP 的实现文件。 但是,对于一些不会在应用程序之间共享的小类,有时将接口和实现组合成单个 .CPP 文件会更容易。

CObject 派生类时,可以从四个级别的功能中进行选择:

  • 基本功能:不支持运行时类信息或序列化,但包括诊断内存管理。

  • 基本功能加上对运行时类信息的支持。

  • 基本功能加上对运行时类信息和动态创建的支持。

  • 基本功能加上对运行时类信息、动态创建和序列化的支持。

为重用而设计的类(以后将用作基类的类)至少应包括运行时类支持和序列化支持(如果预期将来有任何序列化需求)。

通过在从 CObject 派生的类的声明和实现中使用特定的声明和实现宏来选择功能级别。

下表显示了用于支持序列化和运行时信息的宏之间的关系。

用于序列化和运行时信息的宏

使用的宏 CObject::IsKindOf CRuntimeClass::

CreateObject
CArchive::operator>>

CArchive::operator<<
基本 CObject 功能 No No
DECLARE_DYNAMIC No No
DECLARE_DYNCREATE
DECLARE_SERIAL

使用基本 CObject 功能

  1. 使用普通 C++ 语法从 CObject(或从 CObject 派生的类)派生类。

    下面的示例演示最简单的情况,即从 CObject 派生类:

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

但是,通常情况下,最好替代 CObject 的某些成员函数来处理新类的详细信息。 例如,通常建议替代 CObjectDump 函数,以便为类的内容提供调试输出。 有关如何替代 Dump 的详细信息,请参阅对象转储自定义一文。 还建议替代 CObjectAssertValid 函数,以提供自定义测试来验证类对象的数据成员是否一致。 有关如何替代 AssertValid 的说明,请参阅 MFC ASSERT_VALID 和 CObject::AssertValid

指定功能级别一文介绍如何指定其他级别的功能,包括运行时类信息、动态对象创建和序列化。

另请参阅

使用 CObject