本文介绍从 CObject 派生类所需的最低步骤。 其他 CObject 类文章介绍了需要遵循的步骤,以充分利用特定功能,例如序列化和诊断调试支持 CObject。
在对CObject的讨论中,经常使用术语“接口文件”和“实现文件”。 接口文件(通常称为头文件,或 。H 文件)包含类声明以及使用该类所需的任何其他信息。 实现文件(或 。CPP 文件包含类定义以及实现类成员函数的代码。 例如,对于名为CPerson的类,通常会创建一个名为PERSON.H的接口文件和一个名为PERSON.CPP的实现文件。 但是,对于某些在应用程序之间不会共享的小型类,有时将接口和实现合并为单个 .CPP 文件会更容易。
从CObject派生类时,可以选择四个功能级别:
基本功能:不支持运行时类信息或序列化,但包括诊断内存管理。
基本功能以及对运行时类信息的支持。
基本功能,并支持运行时类信息和动态创建。
基本功能以及对运行时类信息、动态创建和序列化的支持。
设计用于重复使用的类(稍后将用作基类的类)应至少包括运行时类支持和序列化支持(如果预计将来需要序列化)。
通过在从 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 的某些成员函数来处理新类的详细信息。 例如,通常建议替代 Dump 的 CObject 函数,以便为类的内容提供调试输出。 有关如何覆盖 Dump 的详细信息,请参阅《对象转储自定义》一文。 还建议替代 AssertValid 的 CObject 函数,以提供自定义测试来验证类对象的数据成员是否一致。 有关如何替代 AssertValid 的说明,请参阅 MFC ASSERT_VALID 和 CObject::AssertValid。
指定功能级别的文章介绍了如何指定其他级别的功能,包括运行时类信息、动态对象创建和序列化。