AssertValid函数是用来判断表达式的合法性或正确性,如果不正确或不合法则终止程序并返回相应的提示信息 如AssertValid(t==0);//用来判断t是否等于0,如果t!=0则终止程序
Dump函数一般用来显示debug信息的,其函数中的内容一般在debug时,在debug窗口中才能看到。
1、CDocument::AssertValid()和CDocument::Dump(dc)这2个 成员函数 是用在debug调试用的,编写程序时可以不要管他。
2、AssertValid( )通过检查对象的内部状态执行对象的有效性检查。在Debug版本下,AssertValid( )可以断言并中止程序,同时给出断言失败发生的位置,包括文件名和行号。(在程序运行时检查对象的正确性)
Dump( )函数也用来检查,但是需要有你自己的继承类,继承类要重载Dump( ),重载首先调用其基类的Dump函数,随后可以打印一些继承类的数据成员。如果你的类使用IMPLEMENT_DYNAMIC或者IMPLEMENT_SERIAL宏,CObject::Dump( )会打印类名。
AssertValid( )主要是通过定义自己的规则,如一些表达式,来判断对象的有效性,Dump( )主要提供一些debug信息。
3、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版本不发生作用。
4、ASSERT_VALID宏用来在运行时检查一个对象的内部合法性,比如说现在有一个学生对象,我们知道每个学生的年龄一定大于零,若年龄小于零,则该学生对象肯定有问题。事实上,ASSERT_VALID宏就是转化为对象的成员函数AssertValid()的调用,只是这种方法更安全。它的参数是一个对象指针,通过这个指针来调用它的AssertValid()成员函数。
与此相配套,每当我们创建从Cobject类继承而来的一个新的类时,我们可以重载该成员函数,以执行特定的合法性检查。