MFC关键技术模拟(4)------类型识别
来源:互联网 发布:js日历控件 编辑:程序博客网 时间:2024/05/16 19:32
接上一篇:MFC关键技术模拟(3)------RTTI。
在上一篇RTTI里面已经实现了类型识别链表。在它的基础上再来实现类型的识别就相对比较容易了。
所有类的继承图表:
1.IsKindOf()函数的实现
在CObject类里面添加一个IsKindOf()函数。因为CObject类是所有类的根源。那么这个CObject类就会被继承到各个子类中。在IsKindOf()函数中比对传入的参数类是否和当前类一致就可以识别这个类的型别了。添加的IsKindOf()函数如下:
BOOL IsKindOf(const CRuntimeClass *pClass) const{CRuntimeClass* pClassThis = GetRuntimeClass(); //获取当前类的CRuntimeClass对象指针while(pClassThis != NULL) //当前类的CRuntimeClass指针不为空{if(pClassThis == pClass)//比较参数所指类的CRuntimeClass对象指针是否和当前类CRuntimeClass对象指针一致{return TRUE; //一致时返回TRUE}pClassThis = pClassThis->m_pBaseClass; //当前类指针指向其基类,循环再做比较 }return FALSE; //直至其基类再没有任何的基类}
2.IsKindOf()函数的调用
要识别出某个类的类型,直接调用IsKindOf()函数就可以了。在main函数中声明一个CMyDoc的对象指针,然后按照类的继承图表依次检查类型。
CMyDoc* pMyDoc = new CMyDoc;cout<<"CObject\t\t"<<pMyDoc->IsKindOf(RUNTIME_CLASS(CObject))<<endl;cout<<"CCmdTarget\t"<<pMyDoc->IsKindOf(RUNTIME_CLASS(CCmdTarget))<<endl;cout<<"CWinThread\t"<<pMyDoc->IsKindOf(RUNTIME_CLASS(CWinThread))<<endl;cout<<"CWinApp\t\t"<<pMyDoc->IsKindOf(RUNTIME_CLASS(CWinApp))<<endl;cout<<"CMyWinApp\t"<<pMyDoc->IsKindOf(RUNTIME_CLASS(CMyWinApp))<<endl;cout<<"CWnd\t\t"<<pMyDoc->IsKindOf(RUNTIME_CLASS(CWnd))<<endl;cout<<"CView\t\t"<<pMyDoc->IsKindOf(RUNTIME_CLASS(CView))<<endl;cout<<"CMyView\t\t"<<pMyDoc->IsKindOf(RUNTIME_CLASS(CMyView))<<endl;cout<<"CFrameWnd\t"<<pMyDoc->IsKindOf(RUNTIME_CLASS(CFrameWnd))<<endl;cout<<"CMyFrameWnd\t"<<pMyDoc->IsKindOf(RUNTIME_CLASS(CMyFrameWnd))<<endl;cout<<"CDocument\t"<<pMyDoc->IsKindOf(RUNTIME_CLASS(CDocument))<<endl;cout<<"CMyDoc\t\t"<<pMyDoc->IsKindOf(RUNTIME_CLASS(CMyDoc))<<endl;程序运行结果:
比对类的继承图表,由于CMyDoc类继承的是CDocument类,CDocument类继承CCmdTarget类,CCmdTarget类继承CObject类。所以结果显示是这样。
3.调试中的问题
你在程序编译时如果出现无法打开写入exe,可以查看是否程序结果正在运行,在进程中杀死它即可。如果进程中没有运行,有可能是杀毒软件在作怪。关闭杀毒软件,然后编译运行,或者重启后关闭杀毒软件再编译运行。
0 0
- MFC关键技术模拟(4)------类型识别
- MFC六大关键技术之运行时类型识别(RTTI)
- MFC关键技术之运行时类型识别
- 模拟 mfc 类型识别
- 深入浅出MFC学习笔记:(第三章MFC六大关键技术之仿真:类型识别,动态创建) .
- 深入浅出MFC学习笔记:(第三章MFC六大关键技术之仿真:类型识别,动态创建)
- 深入浅出MFC学习笔记:(第三章MFC六大关键技术之仿真:类型识别,动态创建) .
- MFC六大关键技术之运行时类型识别
- MFC六大关键技术之运行时类型识别
- MFC六大关键技术之运行时类型识别
- MFC六大关键技术之运行时类型识别
- MFC六大关键技术之运行时类型识别(RTTI)
- MFC关键技术模拟(3)------RTTI
- MFC关键技术模拟(5)------动态创建
- MFC关键技术模拟(1)------MFC类层次结构
- MFC关键技术模拟(2)------MFC初始化过程
- 深入浅出MFC学习笔记:MFC六大关键技术仿真之RTTI运行时类型识别
- MFC六大关键技术之模拟
- opensession 和getcurrentsession区别
- Ubuntu下MPI配置以及Codeblock配置
- 开源项目AndroidUtil-采用Fragment实现TabHost
- 如何使用cocos2d-x3.0制作一个滑动图片游戏:第一部分
- Online restore
- MFC关键技术模拟(4)------类型识别
- 如何使用cocos2d-x3.0制作一个滑动图片游戏:第二部分
- 哪些互联网公司在掏男人的钱包?
- PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
- 如何捕获和分析 JavaScript Error
- ArcGIS VBA 标注选定的要素
- 如何使用cocos2dx3.0制作基于tilemap的游戏:第一部分
- C语言中的%p
- 网站优化适用的原创内容规则总结