RTTI运行时类型识别课件

上传人:我*** 文档编号:142132031 上传时间:2020-08-17 格式:PPT 页数:20 大小:60KB
返回 下载 相关 举报
RTTI运行时类型识别课件_第1页
第1页 / 共20页
RTTI运行时类型识别课件_第2页
第2页 / 共20页
RTTI运行时类型识别课件_第3页
第3页 / 共20页
RTTI运行时类型识别课件_第4页
第4页 / 共20页
RTTI运行时类型识别课件_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《RTTI运行时类型识别课件》由会员分享,可在线阅读,更多相关《RTTI运行时类型识别课件(20页珍藏版)》请在金锄头文库上搜索。

1、2020/8/17,RTTI运行时类型识别,2020/8/17,实例:Shape,2020/8/17,Shape代码调试,2020/8/17,运行时类型识别(RTTI),Runtime Type Information 如何在程序执行过程中知道某个对象是属于哪一种类(class)?,2020/8/17,运行时类型识别(RTTI),Runtime Type Information 如何在程序执行过程中知道某个对象是属于哪一种类(class)? MFC的RTTI能力涉及到: 宏:DECLARE_DYNAMIC 宏:IMPLEMENT_DYNAMIC 类:CRuntimeClass,2020/8/1

2、7,运行时类型识别(RTTI),Runtime Type Information 如何在程序执行过程中知道某个对象是属于哪一种类(class)? MFC的RTTI能力涉及到: 宏:DECLARE_DYNAMIC 宏:IMPLEMENT_DYNAMIC 类:CRuntimeClass,我们的目标:仿真出一个RTTI的DOS版本,2020/8/17,IsKindOf,目标:程序在执行期间能够侦测某个对象是否“属于某种类”,传回TRUE或FALSE。,2020/8/17,IsKindOf,以Shape为例,我们的目标: CSquare* pSquare = new CSquare; cout IsK

3、indOf(CSquare);/ TRUE cout IsKindOf(CRect);/ TRUE cout IsKindOf(CShape);/ TRUE cout IsKindOf(CCircle);/ FALSE 以MFC的类层次来说,目标: CMyDoc* pMyDoc = new CMyDoc; cout IsKindOf(CMyDoc);/ TRUE cout IsKindOf(CDocument);/ TRUE cout IsKindOf(CCmdTarget);/ TRUE cout IsKindOf(CWnd);/ FALSE,2020/8/17,IsKindOf,以Shap

4、e为例,我们的目标: CSquare* pSquare = new CSquare; cout IsKindOf(CSquare);/ TRUE cout IsKindOf(CRect);/ TRUE cout IsKindOf(CShape);/ TRUE cout IsKindOf(CCircle);/ FALSE 以MFC的类层次来说,目标: CMyDoc* pMyDoc = new CMyDoc; cout IsKindOf(CMyDoc);/ TRUE cout IsKindOf(CDocument);/ TRUE cout IsKindOf(CCmdTarget);/ TRUE c

5、out IsKindOf(CWnd);/ FALSE,注意:真正的IsKindOf参数其实没有那么单纯,2020/8/17,设计RTTI,一种颜色,想知道RGB成分比,查色表 一种产品,想知道型号,查说明书,2020/8/17,设计RTTI,一种颜色,想知道RGB成分比,查色表 一种产品,想知道型号,查说明书 RTTI:在类建构起来的时候,记录必要的信息,以建立型录。 型录中的类信息,以链表方式连接起来,将来方便一一比较。 “类别型录”的链表元素: CRuntimeClass(结构),2020/8/17,CRuntimeClass,CRuntimeClass包含的内容: 类名称 Next指针

6、First指针(全局变量,static) 其它内容,2020/8/17,CRuntimeClass对象内容,2020/8/17,类别型录表,我们希望:每一个类都能拥有这样一个CRuntimeClass成员变量,当经由某种手段将整个类库建构好之后,“类别型录”能呈现这样的风貌:,2020/8/17,类别型录表,2020/8/17,DECLARE_DYNAMIC,#define DECLARE_DYNAMIC(class_name) public: static CRuntimeClass class#class_name; virtual CRuntimeClass* GetRuntimeCla

7、ss() const;,2020/8/17,IMPLEMENT_DYNAMIC,#define IMPLEMENT_DYNAMIC(class_name, base_class_name) _IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0 xFFFF, NULL),2020/8/17,DECLARE_DYNAMIC/IMPLEMENT_DYNAMIC,/ *.h class CView : public CWnd DECLARE_DYNAMIC(CView) ; / *.cpp IMPLEMENT_DYNAMIC(CView, CWn

8、d),2020/8/17,DECLARE_DYNAMIC/IMPLEMENT_DYNAMIC,/ *.h class CView : public CWnd public: static CRuntimeClass classCView; virtual CRuntimeClass* GetRuntimeClass() const; ; / *.cpp static char _lpszCView = “CView”; CRuntimeClass CView:classCView = _lpszCView, sizeof(CView), 0 xFFFF, NULL, ,2020/8/17,DECLARE_DYNAMIC(Cxxx)IMPLEMENT_DYNAMIC(Cxxx, Cxxxbase),

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号