自定义对象转储
本主题适用于:
版本 |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
学习版 |
仅限本机 |
||||
专业版、高级专业版和旗舰版 |
仅限本机 |
当从 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 的“Debug”版本提供名为 afxDump 的预定义 CDumpContext 对象,它将输出发送到调试器。
CPerson* pMyPerson = new CPerson;
// Set some fields of the CPerson object.
//...
// Now dump the contents.
#ifdef _DEBUG
pMyPerson->Dump( afxDump );
#endif