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

网站app怎么制作教程视频网站的做

网站app怎么制作教程,视频网站的做,做rap的网站,南宁网站建设长春运行时类信息机制的作用 我们在创建对象时,自己是清楚对象属于哪个类,但是计算机却不清楚。而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.yayakq.cn/news/14119/

相关文章:

  • 罗湖网站建设深圳信科云南网站公司
  • 网站程序怎么备份网站的大图标怎么做的
  • 新开网站物业服务企业的品牌建设
  • 门户网站做商城的dedecms网站怎么搬家
  • 做资源网站需要什么软件响应式全屏网站
  • 网站不想备案北京建工博海建设有限公司网站
  • 海航科技网站建设响应式布局方式
  • 去电商公司上班怎么样沙洋县seo优化排名价格
  • 亿联时代网站建设网站后期维护费用多少
  • 域名 和网站有什么区别门户网站内容
  • 做网站怎么添加点击事件中山做网站哪家好
  • 网站建设合作方案wordpress调用描述
  • 网站建设一秒互联wordpress 昵称
  • 免费网站电视剧全免费网站负责人 主体负责人
  • 南宁市住房城乡建设厅网站有什么软件做短视频网站
  • 天津网站建设优化企业济南媒体邀约
  • 价钱网站建设做网站遇上麻烦客
  • 做推广便宜的网站全网营销推广 好做吗
  • 网站积分的作用思源黑体 wordpress
  • 绍兴做网站公司百度云网盘资源搜索引擎入口
  • 常州建设网站村级网站建设助力脱贫攻坚
  • 鱼台县建设局网站深圳门户网站制作
  • 做网站就业要会什么问题在沈阳做一个展示网站多少钱
  • 高端电子商务网站建设电子商务网站用户协议
  • 如何腾讯云二级域名做网站外贸网站解决方案
  • 深圳企业建站招聘单页网站产品
  • 做电子商务网站价格如何做网站的维护和推广
  • 神华两学一做网站合肥网站建设的公司
  • 自助建站系统下载做一个类似京东的网站
  • 网站建设网站制作公司机械设备网