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

上海做网站公司做网站的公司网络服务设备有哪些

上海做网站公司做网站的公司,网络服务设备有哪些,wordpress创建菜单,南宁网站建设清单运行时类信息机制的作用 我们在创建对象时,自己是清楚对象属于哪个类,但是计算机却不清楚。而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/59089/

相关文章:

  • 建教育网站需要多少钱素材大全
  • 网站建设donglongyun网上学平面设计
  • 响应式网站建设报价单出口外贸论坛
  • 房地产公司 网站建设app拉新工作室
  • 色系网站.网站制作公司站建设
  • 网站关于我们页面设计全屋定制十大名牌是哪些
  • 学校 网站 建设 目的广东省建设厅官方网站电话
  • 网站建设与制作实现精准营销山东封城最新消息2023年
  • 高校档案馆网站建设网站预算怎么做
  • 网站keywordswordpress不用php
  • 做直播网站软件有哪些软件私人定制app
  • 象山区网站建设成都网站建设外包业务
  • 海山网站建设做网站的图片的内存
  • 企业网站免费推广软件公司主页的网站格式
  • 长沙网站建设网网站建设毕业设计评价
  • 秦皇岛建设网站公司互联网平台推广怎么做
  • 网站建设丿金手指下拉公司网站制作找哪家
  • 凡客做网站wordpress页面是什么
  • 江西省建设监督网站微信网站开发 js框架
  • 云主机和云服务器有什么区别网站优化外包找谁
  • 闵行品划网站建设公司开发直播平台网站
  • 房地产网站怎么推广wordpress修改底部联系QQ
  • 互联网技术专业学什么seo知识点
  • 网站添加文章之后更新缓存访问网站就需要输入账号密码电子商务网站建设需要什么
  • 网站建设中 gif阿里云 网站
  • 网站及新媒体建设宣传片网站做301
  • 具有口碑的柳州网站建设公司深圳市交易服务中心
  • 投资 公司 网站模板多用户商城源码下载
  • 网站添加微博做二手货的网站有哪些
  • 织梦做的网站首页排版错误全国十大跨境电商平台