AssertValid()与Dump()函数_wanxiaohong1350的专栏-程序员秘密

技术标签: 语言  c  function  vc程序设计  float  class  

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类继承而来的一个新的类时,我们可以重载该成员函数,以执行特定的合法性检查。

5、TRACE 宏有点象我们以前在C语言中用的Printf函数,使程序在运行过程中输出一些调试信息,使我们能了解程序的一些状态。但有一点不同的是:TRACE 宏只有在调试状态下才有所输出,而以前用的Printf 函数在任何情况下都有输出。和Printf 函数一样,TRACE函数可以接受多个参数如:

int x = 1;
int y = 16;
float z = 32.0;
TRACE( "This is a TRACE statement\n" );
TRACE( "The value of x is %d\n", x );
TRACE( "x = %d and y = %d\n", x, y );
TRACE( "x = %d and y = %x and z = %f\n", x, y, z );
要注意的是TRACE宏只对Debug 版本的工程产生作用,在Release 版本的工程中,TRACE宏将被忽略。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wanxiaohong1350/article/details/7564083

智能推荐

关于c++报错:表达式必须含有常量值 的原因及解决办法---动态分配内存_不尽木的博客-程序员秘密_表达式必须含有常量值

原因:c++中不允许使用变量作为数组的长度定义数组,必须为常量值,c++中所有的内存需求都是在程序执行前通过定义的常量来确定的。但是我们有时候需要在程序运行时才能确定内存需求的变量值,例如所需值是由用户输入的等比如在下面这个(不完整的)代码中,子函数中定义的二维数组的大小需要由形参frame来确定,frame.rows是一个变量same2数组的内存大小是由kind决定的,erk...

http content-type常见文件格式类型_ajax_yan的博客-程序员秘密

https://blog.csdn.net/chaoyu168/article/details/78710591

招银信用卡中心笔试_蜗牛先生-程序员秘密

下面是招商银行信用卡中心笔试三道编程题: ▍第一题题目:我的答案:/** * 通过率33.3% */let lines = readline().split(&quot;&quot;);let count = 0;for(let i = 0; i &amp;lt; lines.length -1; i++){ for(let j = 0; j &amp;lt; lines.length ...

【二叉树】N 叉树的最大深度_豪冷的博客-程序员秘密

0x00 题目给定一个 N 叉树,找到其最大深度最大深度是指从根节点到最远叶子节点的最长路径上的节点总数说明: 叶子节点是指没有子节点的节点。0x01 思路这个题目跟【二叉树的最大深度】类似二叉树有 2 个节点,N 叉树节点有多个由于不知道具体个数,只能通过循环来遍历每个节点方式一:通过循环递归子树,然后记录最大值。方式二:通过层序遍历方式,从当前节点,依次向下寻找。每往下一层,同时记录深度。直到最后一层为空时,则找到了最远的叶子节点。0x02 解法语言:Swift树节点

2020-12-29_zh_study的博客-程序员秘密

mybatisPlus代码生成器pom.xml文件需要引入的依赖&lt;!-- mybatisPlus 核心库 --&gt;&lt;dependency&gt; &lt;groupId&gt;com.baomidou&lt;/groupId&gt; &lt;artifactId&gt;mybatis-plus-boot-starter&lt;/artifactId&gt; &lt;version&gt;3.4.0&lt;/version&gt;&lt;/dependency&

牛客社区项目笔记(五)生成验证码_mmmmjisoo的博客-程序员秘密

生成验证码我们用Kaptcha 先导入依赖然后进行配置,在KaptchaConfig里, 其中NoNoise是为了避免机器人破解@Configurationpublic class KaptchaConfig { @Bean public Producer kaptchaProducer() { Properties properties = new Properties(); properties.setProperty("kaptcha.

随便推点

css3修改透明png颜色_草宝虫的博客-程序员秘密_css透明图片改颜色

实现思路:图片作为背景,drop-shadow阴影形成新的元素,再用left把整体偏移回去,最后用overflow:hidden把原图片隐藏注:当放在其他绝对定位的元素上面时注意z-index的处理。.iconXXX{ overflow:hidden; display: inline-block; position: relative; height:20px; ...

php开源 云盘,开源云盘利器:Nextcloud 21私有云盘搭建_彭仕安的博客-程序员秘密

这款产品就不多介绍了,进来看的小伙伴多少有点了解,就直接进入正题,如果有不了解的小伙伴可以自行查阅,背景类似mysql和mariadb。正文环境系统版本:CentOS 7数据库:MariadbWeb:apachePHP版本:7.4多说两句本来打算用CentOS 8来操作,主要是8版本PHP默认版本就是7.X,但由于红帽的一波操作,今年C8系统估计就不再支持了,所以采用了7安装PHP环境由于Next...

win8进入bios设置从u盘启动_qiqiaiairen的博客-程序员秘密_win8bios设置u盘启动

1. 关闭快速启动1)打开控制面板,选择“硬件和声音”2)进入“硬件和声音”后,选择“电源选项”3)进入“电源选项”后,选择“选择电源按钮的功能”4)进入“选择电源按钮的功能”的选项后,选择“更改当前不可用的设置”5)进入“更改当前不可用的设置”选项后,可以看到“关机设置”中有“启用快速启动(推荐)”的选项,而且此选项默认是开启的。6)取消选择“启用快速启动(推荐)”,然后

我在华为写了13年代码的一些感悟_爱编程-程序员秘密

本文来自《华为人》,作者:徐宏伟原标题:写了十几年代码,我为什么还没有被拿去“祭天”?一天晚上,我和老婆聊天,说部门要我写个“大咖谈软件”的文章,老婆斜了我一眼,淡淡地说...

如何在mac下安装android sdk_weixin_30273763的博客-程序员秘密

本文转载自博友 菩提树下的杨过,在此谢过!众所周知的原因,google的很多网站在国内无法访问,苦逼了一堆天朝程序员,下是在mac本上折腾android 开发环境的过程:一、先下载android sdk for mac给二个靠谱的网址:a).http://down.tech.sina.com.cn/page/45703.htmlb).http://mac.softpedi...

java中文乱码问题的处理方式_weixin_30596023的博客-程序员秘密

URL访问java时。注意:URL:编码二次URLEncoder.encode(URLEncoder.encode(searchKey,"utf-8"),"utf-8");解码一次JAVAURLDecoder.decode(statis.getCarCode(),"UTF-8")转载于:https://www.cnblogs.com/liuying1995/p/5...

推荐文章

热门文章

相关标签