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

深圳分销网站设计制作企业全网推广

深圳分销网站设计制作,企业全网推广,软装设计师需要具备的能力,天津小型网站建设运行时类信息机制的作用 我们在创建对象时,自己是清楚对象属于哪个类,但是计算机却不清楚。而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.khdw.cn/news/62572.html

相关文章:

  • 德阳网站建设网站建设网络营销现状分析
  • 开发一个app难吗seo线下培训机构
  • 泰州做网站需要多少钱网销怎么做才能做好
  • 连云港做企业网站公司免费网站的平台
  • 网站建设主要包括两个方面宁波seo搜索平台推广专业
  • 用二级域名做的网站算新站吗最好的搜索引擎排名
  • 杭州专业网站制作设计上海推广服务
  • 如何用c 做网站背景下载安装
  • 大连 响应式网站个人友情链接推广
  • 旅游网站建设与实现跨境电商怎么开店铺
  • 网站建设要会哪些方面网站seo优化皆宣徐州百都网络不错
  • 广告投放面试常熟seo网站优化软件
  • 上海网站关键词优化方法江西百度推广开户多少钱
  • 网站设计步骤毕业论文百度推广网站平台
  • 网站渗透测试怎么做营销企业
  • 做网站很赚钱吗外贸网站制作
  • 做交友网站多少钱百度极速版推广
  • 公司网站静态模板考试培训
  • 制作和维系一个网站的费用怎么做个网站
  • 网站备案信息真实性核验单流程中国免费域名注册平台
  • 互联网建设网站sem推广是什么
  • 网站建设设计设计网络营销的发展概述
  • 网站建设 选中企动力如何制作自己的网站
  • 青浦区网站建设百度快照功能
  • 泉州手机模板建站结构优化是什么意思
  • 企业文化简介网站怎么做东莞企业网站设计公司
  • 储物柜厂家直销器厂家做网站引流推广犯法吗
  • 高端网站建设公司哪里济南兴田德润实惠吗最经典的营销案例
  • 独立站是什么意思百度搜索首页
  • 公司品牌网站建设域名批量查询系统