MFC特性

一、 RTTI

1、duilib 实现方式:CUIControl 声明 虚函数GetClassName(),衍生重写该函数

2、Mfc实现方式:在类声明(Cxxx.h)的里面(一般在类声明的第一行代码)中插入DECLARE_DYNAMIC(Cxxx) ,在类的定义里面(Cxxx.cpp)里面(一般在头文件下面 类的构造函数上面)插入MPLEMENT_DYNAMIC(Cxxx, Cxxxbase)

这两个宏声明了它的类别名称(静态)classCXXX以及获取类别函数,以及初始化类别名称和获取类别函数的实现

其中

1、获取类型方法 返回& CXXX::classCXXX

2、IsKindOf ,循环往下查找基类是否和传入值一致,如果一致,返回true


二、Dynamic Creation (动态生成)

依赖于RTTI 和两个宏 DECLARE_DYNCREATE,IMPLEMENT_DYNCREATE。

1、用户输入类型名称,然后利用RTTI,从CRuntimeClass 的 pFirstClass开始,不断查找与类型名称一致的内存中的某个类的CRuntimeClass 对象(注意:每个类不管对象数量,只保存一个CRuntimeClass 对象)

2、调用CRuntimeClass 的静态函数指针m_pfnCreateObject,这个指针指向目标类型的静态成员函数CreateObject

3、静态成员函数CreateObjectMPLEMENT_DYNCREATE宏定义为classClassName:CreateObject () { return new class_name; }




你可能感兴趣的:(C++常用,C++读书笔记,c++)