程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> CObject類

CObject類

編輯:關於C語言

 

CObject是大多數MFC類的根類或基類。CObject類有很多有用的特性:對運行時類信息的支持,對動態創建的支持,對串行化的支持,對象診斷輸出,等等。MFC從CObject派生出許多類,具備其中的一個或者多個特性。程序員也可以從CObject類派生出自己的類,利用CObject類的這些特性。

本章將討論MFC如何設計CObject類的這些特性。首先,考察CObject類的定義,分析其結構和方法(成員變量和成員函數)對CObject特性的支持。然後,討論CObject特性及其實現機制。

CObject的結構

以下是CObject類的定義:

class CObject

{

public:

 

//與動態創建相關的函數

virtual CRuntimeClass* GetRuntimeClass() const;

析構函數

virtual ~CObject();  // virtual destructors are necessary

 

//與構造函數相關的內存分配函數,可以用於DEBUG下輸出診斷信息

void* PASCAL operator new(size_t nSize);

void* PASCAL operator new(size_t, void* p);

void PASCAL operator delete(void* p);

#if defined(_DEBUG) && !defined(_AFX_NO_DEBUG_CRT)

    void* PASCAL operator new(size_t nSize, LPCSTR lpszFileName, int nLine);

#endif

 

//缺省情況下,復制構造函數和賦值構造函數是不可用的

//如果程序員通過傳值或者賦值來傳遞對象,將得到一個編譯錯誤

protected:

//缺省構造函數

CObject();

private:

//復制構造函數,私有

CObject(const CObject& objectSrc);        // no implementation

//賦值構造函數,私有

void operator=(const CObject& objectSrc);     // no implementation

 

// Attributes

public:

//與運行時類信息、串行化相關的函數

BOOL IsSerializable() const;

BOOL IsKindOf(const CRuntimeClass* pClass) const;

// Overridables

virtual void Serialize(CArchive& ar);

// 診斷函數

virtual void AssertValid() const;

virtual void Dump(CDumpContext& dc) const;

 

// Implementation

public:

//與動態創建對象相關的函數

static const AFX_DATA CRuntimeClass classCObject;

#ifdef _AFXDLL

static CRuntimeClass* PASCAL _GetBaseClass();

#endif

};

 

由上可以看出,CObject定義了一個CRuntimeClass類型的靜態成員變量:

CRuntimeClass classCObject

還定義了幾組函數:

構造函數析構函數類,

診斷函數,

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved