当前位置:C++技术网 > 资讯 > VS编译器中Dump和AssertValid函数小解

VS编译器中Dump和AssertValid函数小解

更新时间:2015-12-23 14:16:09浏览次数:1+次

Dump成员
virtual void Dump(CDumpContext& dc)const;
dc表示转储上下文。转储上下文类似I/O流。可以使用撤入运算符(<<)像CDumpContexT发送数据。MFC的“Debug"版本提供名为afxDump的预定义CDumpContext对象,它将输出发送到调试器。

Dump成员只有在调试时才有意义,因此,要把Dump函数的声明和实现用#ifdef _DEBUG #endif块括起来。

IMPLEMENT_DYNAMIC是实现”运行时类型识别“宏,与之相对应的就是DECLEAR_DYUNAMIC(声明”运行时类型识别“宏)。也就是说你在.CPP文件中如果看见有IMPLEMENT_DYNAMIC,则在.H文件中必定有DECLARE_DYNAMIC的声明。
DECLARE_DYNAMIC/DEClARE_DYNAMIC是为了确定运行时对象属于哪一个类而定义的宏。
DEClARE_DYNCREATE/IMPLEMENT_DYNCREATE是为了“动态创建"类的实例而定义的宏。new可以用来创建对象,但不是动态的。
重写Dump函数,应先调用Dump的基类版本以转储基类对象的内容。然后为派生类的每一个成员变量输出文本化说明和值。
下面的实例中,Dump函数先为其基类调用Dump函数,然后,她将每个成员变量的简短说明与改成元的值一起写入诊断流。

CObject::AssertValid成员函数提供对对象内部状态的运行时检查。该成员只在调试时有用,并且是const类型的成员,因此不可以改变对象的数据成员。
CObject的AssertValid仅断言当前对象不为NULL:

当重写AssertValid时,在执行自己的检查之前请调用AssertValid的基类版本。然后调用ASSERT宏检查派生类特有的成员,如下所示:

AssertValid机制测试器数据成员中储存的对象的有效性。概括的讲,AssertValid函数是用来判断表达式的合法性或正确性,如果不正确或不合法则终止程序并返回相应的提示信息  
如AssertValid(t==0);//用来判断t是否等于0,如果t!=0则终止程序  
Dump函数一般用来显示debug信息的,其函数中的内容一般在debug时,在debug窗口中才能看到。