当前位置: 首页 > news >正文

深圳分销网站设计制作成都百度推广代理公司

深圳分销网站设计制作,成都百度推广代理公司,南京房产网站建设,网站qq线客服咋做运行时类信息机制的作用 我们在创建对象时,自己是清楚对象属于哪个类,但是计算机却不清楚。而MFC运行时类信息机制就是解决这个问题而存在的 运行时类信息机制的使用 我们在创建一个类时,只有满足以上三个条件,该类才能支持运行时…

运行时类信息机制的作用

我们在创建对象时,自己是清楚对象属于哪个类,但是计算机却不清楚。而MFC运行时类信息机制就是解决这个问题而存在的

运行时类信息机制的使用

我们在创建一个类时,只有满足以上三个条件,该类才能支持运行时类信息机制 

代码验证

#include<afxwin.h>
#include<iostream>
class CAnimal : public CObject
{DECLARE_DYNAMIC(CAnimal);
};
IMPLEMENT_DYNAMIC(CAnimal, CObject)class CDog : public CAnimal
{DECLARE_DYNAMIC(CDog);
};
IMPLEMENT_DYNAMIC(CDog, CAnimal)int main()
{CDog yellowdog;if (yellowdog.IsKindOf(RUNTIME_CLASS(CDog))){std::cout << "yellowdog is CDog" << std::endl;}else{std::cout << "yellowdog is not CDog" << std::endl;}return 0;
}

程序运行,我们发现计算机判断结果是对象yellowdog属于CDog类。

代码修改为判断yellowdog是否属于CAnimal类时,计算机判断结果是对象yellowdog也属于CAnimal类

代码修改为判断yellowdog是否属于CWnd类时,计算机判断结果是对象yellowdog不属于CWnd类

而计算机判断对象是否属于某个类,依据就是上文的三个条件

运行时类信息机制的解析

宏展开

接下来我们展开上文中CDog中实现运行时类信息机制的两个宏,观察该机制是如何工作的

//DECLARE_DYNAMIC(CDog)宏展开
public: static const CRuntimeClass classCDog; //静态的结构体virtual CRuntimeClass* GetRuntimeClass() const; //虚函数//IMPLEMENT_DYNAMIC(CDog,CAnimal)宏展开
IMPLEMENT_RUNTIMECLASS(CDog, CAnimal, 0xFFFF, NULL, NULL)//IMPLEMENT_RUNTIMECLASS(CDog, CAnimal, 0xFFFF, NULL, NULL)宏展开
AFX_COMDAT const CRuntimeClass CDog::classCDog = 
{ "CDog", //类名称sizeof(class CDog), //类大小0xFFFF, //类版本 0xFFFFNULL, //动态创建机制使用,这里为NULL//RUNTIME_CLASS(CAnimal), 这也是一个宏,如下是宏展开的样子((CRuntimeClass*)(&CAnimal:classCAnimal)), //返回父类静态结构体的地址NULL,//不使用为NULLNULL //不使用为NULL
}; CRuntimeClass* CDog::GetRuntimeClass() const 
{ //return RUNTIME_CLASS(CDog); 这也是一个宏,如下是宏展开的样子return ((CRuntimeClass*)(&CDog::classCDog));//返回头节点
}struct CRuntimeClass//CRuntimeClass结构体信息如下所示
{LPCSTR m_lpszClassName;					//类名称int m_nObjectSize;						//类大小UINT m_wSchema; 						//类版本CObject* (PASCAL* m_pfnCreateObject)(); //动态创建才会使用 暂时NULL函数指针CRuntimeClass* m_pBaseClass;			//父类信息CRuntimeClass* m_pNextClass;      		//NULLconst AFX_CLASSINIT* m_pClassInit;		//NULL
}

宏展开各部分作用

如下是IMPLEMENT_DYNAMIC()展开后样子

如图所示,子类指向父类,这又是一个链表

执行过程 

通过遍历上图所示的链表来检查类对象属于哪个类

接下来我们以yellowdog.IsKindOf(RUNTIME_CLASS(CDog))为例讲解整个执行过程

yellowdog.IsKindOf(RUNTIME_CLASS(CDog))//函数内部this为&yellowdog,参数为链表头
{CRuntimeClass* pClassThis = GetRuntimeClass();//利用&yellowdog调用宏展开的虚函数,获取链表头结点classCDogreturn pClassThis->IsDerivedFrom(RUNTIME_CLASS(CDog))//函数内部this和参数都是链表头classCDog{const CRuntimeClass* pClassThis = this;//获取链表头classCDog while (pClassThis != NULL){if (pClassThis == RUNTIME_CLASS(CDog))return TRUE;pClassThis = pClassThis->m_pBaseClass;}return FALSE;}
}

http://www.dt0577.cn/news/48524.html

相关文章:

  • 网站建设公司不赚钱深圳seo培训
  • 微建站官网软件定制开发平台
  • 网站开发维护专员岗位职责百度推广网站一年多少钱
  • 做公司网站详细步骤6网站开发流程图
  • 临沂网站制作培训百度识图 上传图片
  • 网站seo优化怎么做餐饮营销手段13种手段
  • 学网站建设与管理有用吗seo好学吗入门怎么学
  • 刘琪 找谁做网站靠谱媒介平台
  • 网页设计毕业论文格式谷歌seo是什么职业
  • 江西南昌网站开发网络推广服务协议
  • 网站文案案例最新旅游热点
  • 做网站需要php吗女装标题优化关键词
  • 淄博比较好的网站建设公司百度广告费一般多少钱
  • 辽阳网站建设学校公众号推广费用一般多少
  • 成都营销网站建设大连百度seo
  • wordpress优秀案例win10优化大师好用吗
  • 哪个网站可以做代练平台广告推广
  • 百度品牌广告石家庄百度seo排名
  • wordpress实现网站的登陆功能爱站网seo工具包
  • 在线听音乐网站建设网络推广代理
  • 厦门图书馆网站建设站长工具亚洲
  • 怎么做网站关键字搜索百度关键词搜索指数
  • 微网站开发策划黄页推广引流
  • 和平区网站建设网站推广软文范例
  • wordpress网站转app插件下载成人职业技能培训班
  • 微软雅黑适合于做网站吗推广互联网推广
  • phpcms企业网站模板北京整站线上推广优化
  • 正能量软件不良网站下载深圳做推广哪家比较好
  • 做市场分析的网站成都seo正规优化
  • 安全达标建设网站seo流量的提升的软件