网站建设管理办法,生活家装饰官方网站,有个网站做彩盒的,临沂做网站推广的公司有目录1 从 CObject 派生类1.1 使用基本 CObject 功能1.2 添加运行时类信息1.3 添加动态创建支持1.4 添加序列化支持2 访问运行时类信息3 动态对象创建1 从 CObject 派生类
在 CObject 的讨论中#xff0c;经常使用术语“接口文件”和“实现文件”。 接口文件#xff08;通常称…
目录1 从 CObject 派生类1.1 使用基本 CObject 功能1.2 添加运行时类信息1.3 添加动态创建支持1.4 添加序列化支持2 访问运行时类信息3 动态对象创建1 从 CObject 派生类
在 CObject 的讨论中经常使用术语“接口文件”和“实现文件”。 接口文件通常称为头文件或 .H 文件包含类声明和使用该类所需的任何其他信息。 实现文件或 .CPP 文件包含类定义以及实现类成员函数的代码从 CObject 派生类时可以从四个级别的功能中进行选择 1基本功能不支持运行时类信息或序列化但包括诊断内存管理 2基本功能加上对运行时类信息的支持 3基本功能加上对运行时类信息和动态创建的支持 4基本功能加上对运行时类信息、动态创建和序列化的支持为重用而设计的类以后将用作基类的类至少应包括运行时类支持和序列化支持如果预期将来有任何序列化需求通过在从 CObject 派生的类的声明和实现中使用特定的声明和实现宏来选择功能级别
1.1 使用基本 CObject 功能 //.h文件的声明class CSimple : public CObject{// add CSimple-specific members and functions...};1.2 添加运行时类信息
头文件.h文件的声明//.h文件的声明
class CPerson : public CObject
{DECLARE_DYNAMIC(CPerson)// other declarations
};在类的实现文件 (.CPP) 中使用IMPLEMENT_DYNAMIC 宏//此宏采用类的名称及其基类作为参数
IMPLEMENT_DYNAMIC(CPerson, CObject)始终将 IMPLEMENT_DYNAMIC 放在类的实现文件 (.CPP) 中。 IMPLEMENT_DYNAMIC 宏应在编译期间只计算一次因此不应在接口文件 (.H)该接口文件可能包含在多个文件中
1.3 添加动态创建支持
从 CObject 类派生你的类在类声明中使用 DECLARE_DYNCREATE 宏定义没有参数的构造函数默认构造函数在类实现文件中添加 IMPLEMENT_DYNCREATE 宏
1.4 添加序列化支持
从 CObject 类派生你的类重写 Serialize 成员函数 如果直接调用 Serialize即不希望通过多态指针序列化对象请省略步骤 3 到 5在类声明中使用 DECLARE_SERIAL 宏定义没有参数的构造函数默认构造函数在实现文件中使用 IMPLEMENT_SERIAL 宏
“多态指针”指向类的对象将其称为 A或从 A 派生任何类的对象例如 B。 若要通过多态指针进行序列化框架必须确定它正在序列化 (B) 的对象运行时类因为它可能是从某些基类 (A) 派生的任何类的对象
2 访问运行时类信息
如果已从 CObject 派生类并使用了从 CObject 派生类一文中介绍的 DECLARE_DYNAMIC 和 IMPLEMENT_DYNAMIC、DECLARE_DYNCREATE 和 IMPLEMENT_DYNCREATE、或 DECLARE_SERIAL 和 IMPLEMENT_SERIAL 宏则 CObject 类能够在运行时确定对象的具体类使用 RUNTIME_CLASS 宏
CRuntimeClass *pClass RUNTIME_CLASS(CObject);使用 IsKindOf 函数: 可用于确定某个特定对象是否属于某个指定类或者是否派生自某个特定类且确保类具有运行时类支持
class CPerson : public CObject
{DECLARE_DYNAMIC(CPerson)// other declarations
};3 动态对象创建
在给定运行时类的情况下动态创建对象
CRuntimeClass* pRuntimeClass RUNTIME_CLASS(CMyClass);
CObject* pObject pRuntimeClass-CreateObject();
ASSERT(pObject-IsKindOf(RUNTIME_CLASS(CMyClass)));在需要序列化或动态可创建性等功能时可以从 CObject 派生一个类。 许多数据类需要序列化到文件中因此通常最好从 CObject 派生从 CObject 类派生的开销是最小的。 派生的类仅继承四个虚函数和一个 CRuntimeClass 对象