CRuntimeClass

本文详细介绍了MFC框架中CRuntimeClass类的作用及应用。重点讲解了如何使用CObject::IsKindOf方法判断对象类型,以及CRuntimeClass::CreateObject方法创建对象实例的过程。此外还提供了一些示例代码帮助读者理解。
部署运行你感兴趣的模型镜像
  文章指数:0  优快云 Blog推出文章指数概念,文章指数是对Blog文章综合评分后推算出的,综合评分项分别是该文章的点击量,回复次数,被网摘收录数量,文章长度和文章类型;满分100,每月更新一次。

CRuntimeClassMFC中的作用很重要,因为MFC利用它来进行类的动态确定,即是通过类变量来判定该变量是否为某一类的实例。由于指针的类型是可以转换的,所以时常会出现从AB的转换导致错误。而在MFC的各种书籍中对CRuntimeClass的介绍是比较少的,在这里总结它的一些用法。
1
、动态确定类
MFCCObject::IsKindOf( const CRuntimeClass* pClass ) 利用CRuntimeClass来进行判定,如果你生成的类是以CObject为基础的,你可以使用该成员函数来判定。下面举一个例子来加深了解。

class CAge:public CObject
BOOL IsAge(CObject
* pO)
{
    
return pO->IsKindOf( RUNTIME_CLASS( CAge ) );
}

BOOL IsAge2(CAge
* pO)
{
    
return pO->IsKindOf( RUNTIME_CLASS( CAge ) );
}

void main(void)
{
    CObject a;
    CAge b;
    IsAge(
&a);//return FALSE
    IsAge(&b);//return TRUE
    IsAge2((CAge*)&a);//return FALSE,避免强制转换带来的错误
}

 2、生成类
CObject CRuntimeClass::CreateObject(void)
可以产生一个类变量。作用和new类似,但在某些特殊场合有独特的作用。下面举一个例子来加深了解。
假定有以下几个类定义

在上面例子中,CreateWnd返回的是CWnd* 其实它是一个CWndA*。你可以进行由父类到子类的强制转换而不必要担心出错。使用CRuntimeClass可以代替使用switch生产类实例的一些繁琐。(请好好想想它的用途,当你发现它的好处时,你一定会大吃一惊,M$使用宏来实现类的动态检测,如果谁有兴趣可以去看看MFC的源代码。)
注意:在类的定义中使用IMPLEMENT_DYNCREATE后方可生效。 

class CWndA: public CWnd
class CWndB: public CWnd
function1()
{
    CRuntimeClass
* pC=RUNTIME_CLASS( CWndA );
    CreateWnd(pC);
}

CWnd
* CreateWnd(CRuntimeClass* pClass)
{
    
return (CWnd*)pClass->CreateObject();
}


 

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值