0.简介
CObject是大部分Microsoft基础类库(MFC)的根基类。CObject 类具有序列化支持、运行时类信息和对象诊断输出等功能,如果从CObject派生类,则类可以使用这些CObject功能。
注意:CObject类的工作需要CRuntimeClass结构的支持。
1.从CObject派生类
在CObject派生类的声明和实现中使用不同的声明和实现宏,有四个不同级别的功能:
a.基本功能:不支持运行时类信息或序列化,但包含诊断内存管理。
class CPerson : public CObject
{
    //…
}
 
b.基本功能加上运行时类信息支持
1)在类声明中使用 DECLARE_DYNAMIC 宏:
class CPerson : public CObject
{
    DECLARE_DYNAMIC( CPerson )
    //…
};
2)在类的实现文件 (.CPP) 中使用 IMPLEMENT_DYNAMIC 宏:
IMPLEMENT_DYNAMIC( CPerson, CObject )
 
c.基本功能加上运行时类信息和动态创建支持。
1)在类声明中使用 DECLARE_DYNCreate 宏。
2)定义不带参数的构造函数(默认构造函数)。
3)在类实现文件中使用 IMPLEMENT_DYNCreate 宏。
 
d.基本功能加上运行时类信息、动态创建和序列化支持。
1)从 CObject 派生类。
2)重写 Serialize 成员函数。(如果直接调用 Serialize,即不想通过多态指针序列化对象,则省略步骤 3 到 5)
3)在类声明中使用 DECLARE_SERIAL 宏。
4)定义不带参数的构造函数(默认构造函数)。
5)在类实现文件中使用 IMPLEMENT_SERIAL 宏。
2.使用CObject类的功能
a.使用 RUNTIME_CLASS 宏获取运行时类对象
CRuntimeClass* pClass = RUNTIME_CLASS(CPerson);
 
b.使用IsKindOf函数判断当前对象是否是指定类的对象
CObject* pMyObject = new CPerson;
//判断pMyObject指向的对象是否是CPerson类的对象
if(pMyObject->IsKindOf( RUNTIME_CLASS( CPerson ) ) )
{
    //…
}
 
c. 使用CRuntimeClass的CreateObject 函数动态创建对象
CRuntimeClass* pRuntimeClass = RUNTIME_CLASS( CStudent );
CObject* pObject = pRuntimeClass->CreateObject();
if( pObject!=NULL )
{
    //...
}
 
d.使用序列化功能
只要CObject派生类具有序列化支持,则可以通过重写Serialize 成员函数来实现序列化
void CStudent::Serialize( CArchive& archive )
{
    // call base class function first
    // base class is CObject in this case
    CObject::Serialize( archive );
 
    // now do the stuff for our specific class
    if( archive.IsStoring() )
        archive << m_name << m_number;
    else
        archive >> m_name >> m_number;
} 
3.在MSDN2003中的位置
ms-help://MS.MSDNQTR.2003FEB.2052/vccore/html/_core_CObject_Class_Topics.htm
 

 


本文链接地址: MFC学习笔记之5:使用CObject
https://blog.qingfengju.com/index.asp?id=109

上一篇: MFC学习笔记之4:CScrollView的简单应用
下一篇: 在思源学院拍的电视剧《多梦季节》

分类:Win32/C++ 查看次数:5745 发布时间:2009/7/7 13:00:57