<深入浅出MFC>中Fream3中这些代码看不懂是什么???
发布网友
发布时间:2024-09-29 22:28
我来回答
共4个回答
热心网友
时间:2024-10-04 01:58
☆《深入浅出MFC》MFC仿真——动态类型识别RTTI
我们作为类库的设计者要在类构造起来的时候,记录必要的信息,以建立型录。型录中的类的信息,最好以链表方式连接起来。一般“类别型录”是一个结构,其中至少需要类名字,链表的Next指针,以及链表的First指针。First属于整体变量,一份就好,所以用static修饰。
为了将每一个类都能拥有成员变量集合,并且最好有一定的命名规则,然后经某种手段将整个类库构造好之后,“类别型录”(就是各个CRuntimeClass对象)则能呈现为:
☆什么是DECLARE_DYNAMIC/IMPLEMENT_DYNAMIC 宏?
作用就是完成RTTI的“类别型录”。为了将一个类对象塞到类之中,并定义一个可以捕捉到该对象地址的函数,定义一个宏为:
#define DECLARE_DYNAMIC(class_name)
public:
static CRuntimeClass class##class_name;
virtual CRuntimeClass* GetRuntimeClass()const;
将类放入DECLARE_DYNAMIC宏就是把要放的对象放到了里边。具体连接工作是由IMPLEMENT_DYNAMIC宏来实现:
#define IMPLEMENT_DYNAMIC(class_name,base_class_name)
_IMPLEMENT_RUNTIMECLASS(class_name,base_class_name,0xFFFF,NULL)
IMPLEMENT_DYNAMIC内容制定初值,使用了一个struct AFX_CLASSINIT {AFX_CLASSINTI(CRuntimeClass * pNewClass);};
AFX_CLASSINIT::AFX_CLASSINIT(CRuntimeClass*pNewClass)
{ pNewClass->m_NextClass = CRuntimeClass::pFirstClass;
CRuntimeClass::pFirstClass = pNewClass;
}
就是上边的这个构造函数完成了连接工作。
在宏定义中,出现的##说明将前后两部分连接在一起,出现#说明将#后的部分转换成字符串。
热心网友
时间:2024-10-04 02:03
这些就是类型声明 和宏定义,反斜线意思是就是一行代码分成多行写,告诉编译器这一句没有结束,由于宏定义没有分号结束符,所以要一句写成多行就要加上反斜线,不然编译器是不知道 的
热心网友
时间:2024-10-04 02:07
妹子啊现如今想找个好男人不容易啊你可要好好把握哦。我也是朋友介绍的咨询师,在他的指引下我顺利的通过了老公那一关,我现在的生活很不错;哪个男人都希望是自己的女人的唯一!所以我也向你推荐:如果有需要,可以加咨询师扣扣 号,前四位数:陆四一六、后五位数:二零⑦八捌;他也会指导你。希望你能得到和我一样的幸福.祝你成功
热心网友
时间:2024-10-04 01:59
反斜线代表下一行是这一行的继续,因为宏定义中间不能有回车和空格
比如
#define RUNTIME_CLASS(class_name) \
(&class_name::class##class_name)
相当于
#define RUNTIME_CLASS(class_name) (&class_name::class##class_name)
而##表示把前面的名字和后面的接起来
比如class_name为abc时
class##class_name就相当于classabc
以上代码是MFC自动生成的,主要定义一些常用的运行时类型检查宏,初学的话没有必要看懂