RTTI(运行时类型识别)
参考文献:深入浅出MFC-侯捷
怎样去构造类别型录网?
一、定义数据结构:
其中pFirstClass指针属于痊愈变量,所以它应该以static修饰之。
而且我们最终希望达到以下这样子的效果:构造成如下的类别型录
二、具体做法:
1.在头文件和cpp文件中放入两个神奇的宏:
(1)DECLARE宏的定义
只.在头文件中放入声明宏,则等价于下面定义:
(2)IMPLEMENT宏的定义
只要在cpp文件中放入IMPLEMENT宏,则等价于下面的语句
2.对于Cobject(最基类),需要另外定义特殊的宏,不能套用之前的:
设计如下:
并且此时CruntimeClass的static成员变量需要初始化:
最终结果如下:
3.最后就形成了类别型录网:
三、有了类别型录网,就可以实现IsKindOf功能,在Cobject中添加这个函数,于是这个函数就被所有类别所继承。
IsKindOf功能:为了
具体代码如下:能在执行期间侦测某个对象是否属于某种类别。例如:CDocument对象应该是属于CDocument类别和CDocument的基类CCmdTarget。
该函数把参数所指定的CRuntimeClass对象拿来与类型型录中元素一一比对,比对成功就传回TRUE,否则返回FALSE。
总结:设计出该类型型录网可以很方便的构造出类的层次结构图。