b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

declare_dyncreate_waxgourd0的专栏(2)

电脑杂谈  发布时间:2016-04-15 10:28:56  来源:网络整理

“CRuntimeClass* class_name::GetRuntimeClass() const { return _RUNTIME_CLASS(class_name); }”语句很简单,就一个return语句,是之前在DECLARE_DYNAMIC里定义的GetRuntimeClass的实现。下面再来看看其中嵌套使用的 RUNTIME_CLASS 宏定义:

#define _RUNTIME_CLASS(class_name) ((CRuntimeClass*)(&class_name::class##class_name)) #ifdef _AFXDLL #define RUNTIME_CLASS(class_name) (class_name::GetThisClass()) #else #define RUNTIME_CLASS(class_name) _RUNTIME_CLASS(class_name) #endif
这部分之所以单独define出一个宏,主要是为了方便从某个指定的class直接得到它的CRuntimeclass静态成员。

最后来看CRuntimeClass,CRuntimeClass没有基类。每个由CObject派生的类都与一个CRuntimeClass结构相联系,用户可以使用该结构获取一个对象及其基类的运行时信息。当需要额外的函数参数检查时,或当用户必须根据一个对象的类编写特殊目的代码时,在运行时确定该对象的类就非常有用。C并不直接支持运行时类的信息。

在MFC中CObject::IsKindOf( const CRuntimeClass* pClass ) 利用CRuntimeClass来进行判定,如果你生成的类是以CObject为基础的,你可以使用该成员函数来判定。下面举一个参考来的例子来加深了解CRuntimeClass,以及那几个宏的作用。

class CAge : public CObject { DECLARE_DYNCREATE(CAge); }; class CAge2 : public CObject { declare_dyncreate(CAge2); }; IMPLEMENT_DYNCREATE(CAge,CObject) IMPLEMENT_DYNCREATE(CAge2,CObject) BOOL IsAge(CObject* pO) { return pO->IsKindOf( RUNTIME_CLASS( CAge ) ); }; BOOL IsAge2(CAge* pO) { return pO->IsKindOf( RUNTIME_CLASS( CAge ) ); }; int main(int argc, char* argv[]) { CAge age; CAge2 age2; BOOL bKind = IsAge(&age2);//return FALSE bKind = IsAge(&age);//return TRUE bKind = IsAge2((CAge*)&age2);//return FALSE,避免强制转换带来的错误 }

以上就是关于declare_dyncreate的全部内容,相信你一定会非常满意。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shenmilingyu/article-842-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 孟土淋
      孟土淋

      美帝终究是最根本的敌人

    • 丹泽尔华盛顿
      丹泽尔华盛顿

      福喜都不知道把肉送去检测太单纯了

    热点图片
    拼命载入中...