CObject是大部分的MFC类的基类 为了完成MFC类的判断、动态生成、序列化等特殊功能,CObject中添加了特定的处理。 为了进一步增强对MFC类对象的理解,在此对CObject源码及相关宏定义进行分析。 (所附代码并非原始代码,为说明问题而作了删减。) 主要介绍了以下几方面内容:
1.CObject简要声明
2.CRuntimeClass结构
3.RUNTIME_CLASS
4.DYNAMIC支持
5.DYNCREATE支持
6.SERIAL支持
一.CObject简要声明
class CObject
{
public:
virtual CRuntimeClass* GetRuntimeClass() const;
virtual ~CObject();
void* PASCAL operator new(size_t nSize);
void* PASCAL operator new(size_t, void* p);
void PASCAL operator delete(void* p);
void PASCAL operator delete(void* p, void* pPlace);
#if defined(_DEBUG) //调试模式用,多了nLine参数,用于保存原码行号。
void* PASCAL operator new(size_t nSize, LPCSTR lpszFileName, int nLine);
void PASCAL operator delete(void *p, LPCSTR lpszFileName, int nLine);
#endif
protected:
CObject();
private:
CObject(const CObject& objectSrc);
void operator=(const CObject& objectSrc);
// Attributes
public:
BOOL IsSerializable() const;
BOOL IsKindOf(const CRuntimeClass* pClass) const;
// Overridables
virtual void Serialize(CArchive& ar);
#if defined(_DEBUG) //调试模式下用
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
public:
static const AFX_DATA CRuntimeClass classCObject;
static CRuntimeClass* PASCAL _GetBaseClass();
};在此声明中很多都是纯虚函数,定义的一个一般对象的"界面"