CObject Dump ASSERT

1. 持续性
从CObject类直接或间接继承下来的类能维护一个对象持续性。即将内存中的对象数据保存到持久
介质,或反过来,从持久介质中读取数据,然后重建对象。例如,CStudent类是从CObject类的派
生类,那么CStudent从CObject自然地继承得到了一个担任数据持续化的虚函数
Serialize(CArchive &ar),只要调用该函数,CStudent对象便可完成持续化,即完成CStudent对象的文件存取。
CArchive对象ar保存了以读或写的方式打开的文件的相关信息,如文件句柄等。Serialize()函数的主
要逻辑已封闭在CObject对象中,但是对什么数据进行操作,将依赖于各类对该虚函数的重载。
2. 动态性
前面已介绍过文档类、视图类、窗口框架类的动态创建。但从CObject类派生的类只具有一般意义上
的动态性,例如,CStudent是CObject的派生类,那么CStudent自然从CObject得到一个成员函数
IsKindOf(CRunTimeClass*ptr),只要调用该函数,CStudent对象就可以判断该类指针所指是不是CStudent类对象。
3. 诊断性
CObject类提供了把对象状态转储给调试机制(如Debug输出窗口)的能力。CObject类有两种存储
方式,通过CDumpContext类或者AssertValid()成员函数。Dump()成员函数能够把类的内部数据输
出到CDumpContext类对象afxDump中,而afxDump是与调试输出窗口绑定的;AssertValid()成员函数能够自动维护数据的有效性。
例如,在任一个SDI应用程序中,文档类都是CObject的派生类,自然继承了Dump()和AssertValid()
函数,如程序清单8-13所示。

#ifdef _DEBUG
void CMy05262Doc::AssertValid() const
{
    ASSERT(!m_strName.IsEmpty());       // 不能为空
    ASSERT(!(m_nAge < 0));              // 不能小于0

    CDocument::AssertValid();
}

void CMy05262Doc::Dump(CDumpContext& dc) const
{
    dc << "m_strName:" << m_strName << "\n";
    dc << "m_nAge:" << m_nAge << "\n";

    CDocument::Dump(dc);
}
#endif //_DEBUG

// 构造函数和析构函数
CMy05262Doc::CMy05262Doc()
{
    m_strName = _T("liangjisheng");
    m_nAge = 1;
}

CMy05262Doc::~CMy05262Doc()
{
#ifdef _DEBUG
    Dump(afxDump);
#endif
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值