Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 软件时空 > 软件相关 > AssertValid()
【标  题】:AssertValid()
【关键字】:AssertValid
【来  源】:http://www.cublog.cn/u/21356/showart.php?id=196524

AssertValid()

Your Ad Here
CObject::AssertValid   成员函数提供对对象内部状态的运行时检查。尽管从   CObject   派生类时不需要重写   AssertValid,但可以通过重写使您的类更安全可靠。AssertValid   应在对象的所有成员变量上执行断言,以验证它们包含有效值。例如,它应检查指针成员变量不为   NULL。  
   
  下面的示例显示如何声明   AssertValid   函数:  
  class   CPerson   :   public   CObject  
  {  
  protected:  
        CString   m_strName;  
        float       m_salary;  
  public:  
  #ifdef   _DEBUG  
        virtual   void   AssertValid()   const;       //   Override  
  #endif  
        //   ...  
  };  
  当重写   AssertValid   时,在执行您自己的检查之前请调用   AssertValid   的基类版本。然后使用   ASSERT   宏检查您的派生类特有的成员,如下所示:  
   
  #ifdef   _DEBUG  
  void   CPerson::AssertValid()   const  
  {  
        //   call   inherited   AssertValid   first  
        CObject::AssertValid();  
   
        //   check   CPerson   members...  
        ASSERT(   !m_strName.IsEmpty());   //   Must   have   a   name  
        ASSERT(   m_salary   >   0   );   //   Must   have   an   income  
  }  
  #endif  
  如果任何成员变量存储对象,则可以使用   ASSERT_VALID   宏测试它们的内部有效性(如果它们的类重写了   AssertValid)。  
   
  例如,考虑   CMyData   类,该类在其成员变量之一中存储了一个   CObList。CObList   变量   m_DataList   存储了一个   CPerson   对象的集合。CMyData   的简化声明如下所示:  
   
  class   CMyData   :   public   CObject  
  {  
        //   Constructor   and   other   members   ...  
        protected:  
              CObList*   m_pDataList;  
        //   Other   declarations   ...  
        public:  
  #ifdef   _DEBUG  
              virtual   void   AssertValid(   )   const;   //   Override  
  #endif  
        //   Etc.   ...  
  };  
  CMyData   中重写的   AssertValid   如下所示:  
   
  #ifdef   _DEBUG  
  void   CMyData::AssertValid(   )   const  
  {  
        //   Call   inherited   AssertValid  
        CObject::AssertValid(   );  
        //   Check   validity   of   CMyData   members  
        ASSERT_VALID(   m_pDataList   );  
        //   ...  
  }  
  #endif  
  CMyData   使用   AssertValid   机制测试其数据成员中存储的对象的有效性。CMyData   中重写的   AssertValid   为它自己的   m_pDataList   成员变量调用   ASSERT_VALID   宏。  
   
  因为   CObList   类也重写   AssertValid,所以有效性测试不在该级别停止。该重写对列表的内部状态执行附加有效性测试。因此,对   CMyData   对象的有效性测试将导致对存储的   CObList   列表对象内部状态的附加有效性测试。  
   
  再多进行一些操作,还可以添加对存储在列表中的   CPerson   对象的有效性测试。可以从   CObList   派生   CPersonList   类,并重写   AssertValid。在重写中可调用   CObject::AssertValid,然后循环访问列表,在列表中存储的每个   CPerson   对象上调用   AssertValid。本主题开始所示的   CPerson   类已重写了   AssertValid。  
   
  当为调试生成时,这是一种功能极强的机制。当接着为发布生成时,该机制自动关闭。  
   
  AssertValid   的限制  
  给定类的   AssertValid   函数的用户应注意该函数的限制。触发的断言指示对象一定有误,并且执行将暂停。但是,缺少断言只指示未找到任何问题,并不保证对象是好的。  
Dump():【上一篇】
DEBUG和__FILE__:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • 用ASP读INI配置文件的函数
  • Microsoft's online virtual lab
  • 内部安全从工作站抓起
  • 企业信息化行动纲领——中国企业信息化方法论
  • CGI脚本在WIN2000、WINNT下的安装
  • VS2005各版本比较(Express Products、Standard Edition、Professional Edition、Tools For Office、Team Sy...
  • document.execCommand()函数可用参数解析
  • Linux网络服务器配置基础(下)
  • 支持.NET 2.0又支持中文的NDoc
  • 被心痛穿越
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.