基本问题求助

quanyy 2004-04-11 03:30:04
请问void Cobject::Dump(CDumpContext& dc)const函数是干什么用的?
CDumpContext类又代表什么?
...全文
61 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
enoloo 2004-04-11
  • 打赏
  • 举报
回复
来晚了,和和~~

bluebohe 2004-04-11
  • 打赏
  • 举报
回复
在调试中有一种方法可以将对象内部内容输出到调试窗口中,这就是使用转储(Dump)。转储的实现要通过对象自身实现,在通过对象自身实现时有一个好处就在于可以输入内部受保护层成员。首先CObject类定义了虚函数:virtual void Dump( CDumpContext& dc ) const;当你从CObject中派生新类时你需要重载该函数,例如下面是个很简单的例子:

class CMyButton : public CButton
{
public:
CMyButton();
~CMyButton(){};
public:
#ifdef _DEBUG
//由于转储只在调试版本中实现,所以使用条件编译
virtual void Dump( CDumpContext& dc ) const;
#endif

protected:
CString m_szHotText;//当鼠标移动过显示的文字
};

CMyButton::CMyButton():CButton()
{
}

#ifdef _DEBUG
void CMyButton::Dump( CDumpContext& dc ) const
{
dc<<"\n";
CButton::Dump(dc);
dc<<"\ndump of CMyButton \ntext is "<<m_szHotText;
dc<<"\n";
}
#endif

我们看到Dump函数接受一个参数为CDumpContext,通过该类可以将数据输出到调试窗口或是文件。CDumpContext重载了<<操作符,利用<<可以输出各种类型的数据。下面的代码示范了调用方法:

void CSam_sp_31Dlg::OnDump()
{
CButton bu1;
CMyButton bu2;
#ifdef _DEBUG
//由于转储只在调试版本中实现,所以使用条件编译
bu1.Dump(afxDump); //afxDump是一个CDumpContext类型的全局变量。
bu2.Dump(afxDump);
#endif
}
//输出的调试信息为:
a CButton at $64F538
m_hWnd = 0x0

a CButton at $64F4F4
m_hWnd = 0x0
dump of CMyButton
text is not init
//上面两行输出了CButton的转储信息,后面四行输出了CMyButton的转储信息。

——————————————————————————————————
Dump 函数用来按指定的格式输出一个对象的成员变量,来帮助你诊断一个对象的内部情况。与AssertValid成员函数一样,Dump也是Cobject 类的成员函数。Dump函数的参数是一个CdumpContext对象,你可以象利用流一样往向这个对象中输入数据。当你创建一个Cobject继承而来的 新类时,你可以按如下步骤重载你自己的Dump函数:
(1) 调用基类的Dump函数,以输出基类的内容;
(2) 向Cdumpcontest对象输出该类的数据.
例如,典型的Dump函数定义如下:
#ifdef _DEBUG
void CPerson::Dump( CDumpContext& dc ) const
{
// call 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
你可能已经注意到整个函数的定义都包含在#ifdef _DEBUG 和#endif中,这使得Dump成员函数只在DEBUG版本中发生作用,而对RELEASE版本不发生作用。

badguy2002 2004-04-11
  • 打赏
  • 举报
回复
关于CDumpContext
MSDN上是这样描述的:
The CDumpContext class supports stream-oriented diagnostic output in the form of human-readable text. You can use afxDump, a predeclared CDumpContext object, for most of your dumping. The afxDump object is available only in the Debug version of the Microsoft Foundation Class Library.

其实就是一个用于打印(倾印)调试诊断信息的上下文环境,或者说输出对象,具体你可以看看
MSDN中
Using MFC Debugging Support章的
Using Object Dumps小节




badguy2002 2004-04-11
  • 打赏
  • 举报
回复
主要是用来打印诊断信息的,主要是调试用的
// example for CObject::Dump
void CAge::Dump( CDumpContext &dc ) const
{
CObject::Dump( dc );
dc << "Age = " << m_years;
}

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧