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

深圳分销网站设计制作合肥seo代理商

深圳分销网站设计制作,合肥seo代理商,高端网站建设报价,哪些php网站运行时类信息机制的作用 我们在创建对象时,自己是清楚对象属于哪个类,但是计算机却不清楚。而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.15wanjia.com/news/24608.html

相关文章:

  • 无锡商城网站建设竞价 推广
  • 国家最新防疫政策seo主要做哪些工作
  • 用js做的个人酷炫网站2022搜索引擎
  • 学历网站怎么做数据分析师培训机构推荐
  • 做财务还是网站运营搜索引擎优化策略
  • 创建网站域名多少钱互联网营销渠道有哪些
  • 优享揭阳网站建设上海网站外包
  • 深圳国网站建设安卓系统优化软件
  • 建设网站注意什么seo营销策略
  • 河南免费网站建设公司推荐黄页88
  • h5模板是什么宁波seo整体优化
  • 如何制作网站新手教程软文新闻发布平台
  • 企业网站建设价格百度网
  • 国外文本排版设计网站求职seo
  • 网站建站素材百度seo搜索引擎优化厂家
  • 网站域名更改了怎么换吉林seo技术交流
  • 聊城做企业网站怎么做网站免费的
  • 内容营销的定义福建seo外包
  • 买个网站域名多少钱一年搜索引擎网络排名
  • 北京装修公司招聘工长广东网站seo策划
  • 中小企业名录查询官网青岛官网seo
  • 怎样建设网站是什么意思广告海外推广
  • 做数据分析网站深圳整合营销
  • oppo游戏中心官网长沙seo优化推广公司
  • 做网站设计参考文献百度推广平台
  • 做钢材的网站石家庄今日头条新闻
  • 深圳网站设计公司怎么创建网站免费建立个人网站
  • 单机多wordpress沧州网站seo
  • 怎样做视频播放网站找片子有什么好的关键词推荐
  • 全国网站开发赛百度seo优化服务项目