物件傾印自訂
這個主題適用於:
版本 |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
僅適用原生 |
||||
Pro、Premium 和 Ultimate |
僅適用原生 |
當您從 CObject 衍生類別時,使用 DumpAllObjectsSince 來傾印物件至輸出視窗時,您可以覆寫 Dump 成員函式以提供額外的資訊。
Dump 函式將物件的成員變數的文字表示寫入傾印內容 (CDumpContext)。 傾印內容類似 I/O 資料流。 您可以使用附加運算子 (<<) 將資料傳送至 CDumpContext。
當您覆寫 Dump 函式時,您應該先呼叫 Dump 的基底類別版本來傾印基底類別物件的內容。 接著輸出衍生類別中每個成員變數的文字說明和值。
Dump 函式的宣告看起來像這樣:
class CPerson : public CObject
{
public:
#ifdef _DEBUG
virtual void Dump( CDumpContext& dc ) const;
#endif
CString m_firstName;
CString m_lastName;
// And so on...
};
因為只有在偵錯程式時,物件傾印才具有意義,Dump 函式的宣告會以 #ifdef _DEBUG / #endif 區塊括號起來。
在下列範例裡,Dump 函式先呼叫基底類別的 Dump 函式。 然後將每個成員變數的簡短說明和成員的值一起寫入至診斷資料流。
#ifdef _DEBUG
void CPerson::Dump( CDumpContext& dc ) const
{
// Call the base class function first.
CObject::Dump( dc );
// Now do the stuff for our specific class.
dc << "last name: " << m_lastName << "\n"
<< "first name: " << m_firstName << "\n";
}
#endif
您必須提供 CDumpContext 引數來指定傾印的輸出位置。 MFC 的偵錯版本提供一個可以傳送輸出至偵錯工具的預先定義 CDumpContext 物件 (名為 afxDump)。
CPerson* pMyPerson = new CPerson;
// Set some fields of the CPerson object.
//...
// Now dump the contents.
#ifdef _DEBUG
pMyPerson->Dump( afxDump );
#endif