CObject: CObject是大多数MFC类的根类或基类。CObject类有很多有用的特性:对运行时类信息的支持,对动态创建的支持,对串行化的支持,对象诊断输出,等等。MFC从CObject派生出许多类,具备其中的一个或者多个特性。程序员也可以从CObject类派生出自己的类,利用CObject类的这些特性。
// class CObject is the root of allcompliant objects
class AFX_NOVTABLE CObject
{
public:
// Object model (types, destruction,allocation)
virtualCRuntimeClass* GetRuntimeClass() const;
virtual~CObject() = 0; // virtual destructorsare necessary
//Diagnostic allocations
void*PASCAL operator new(size_t nSize);
void*PASCAL operator new(size_t, void* p);
voidPASCAL operator delete(void* p);
voidPASCAL operator delete(void* p, void* pPlace);
#if defined(_DEBUG) && !defined(_AFX_NO_DEBUG_CRT)
//for file name/line number tracking using DEBUG_NEW
void*PASCAL operator new(size_t nSize, LPCSTR lpszFileName, int nLine);
voidPASCAL operator delete(void *p, LPCSTR lpszFileName, int nLine);
#endif
//Disable the copy constructor and assignment by default so you will get
// compiler errors instead of unexpectedbehaviour if you pass objects
// by value or assign objects.
protected:
CObject();
private:
CObject(constCObject& objectSrc); //no implementation
voidoperator=(const CObject& objectSrc); // no implementation
// Attributes
public:
BOOLIsSerializable() const;
BOOLIsKindOf(const CRuntimeClass* pClass) const;
// Overridables
virtualvoid Serialize(CArchive& ar);
#if defined(_DEBUG) || defined(_AFXDLL)
//Diagnostic Support
virtualvoid AssertValid() const;
virtualvoid Dump(CDumpContext& dc) const;
#endif
// Implementation
public:
staticconst CRuntimeClass classCObject;
#ifdef _AFXDLL
staticCRuntimeClass* PASCAL _GetBaseClass();
staticCRuntimeClass* PASCAL GetThisClass();
#endif
}
其中,AFX_NOVTABLE定义如下:
#ifndef AFX_NOVTABLE
#if !defined(_DEBUG)
#define AFX_NOVTABLE __declspec(novtable)
#else
#define AFX_NOVTABLE
#endif