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

【上位机——MFC】运行时类信息机制

运行时类信息机制的使用

  1. 类必须派生自CObject
  2. 类内必须添加声明宏DECLARE_DYNAMIC(theClass)
  3. 3.类外必须添加实现宏 IMPLEMENT_DYNAMIC(theClass,baseClass)

具备上述三个条件后,CObject::IsKindOf函数就可以正确判断对象是否属于某个类。

代码示例

#include <afxwin.h>
#include <iostream>using namespace std;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;// 判断yellowdog 这个类是不是CDog这个类//if (yellowdog.IsKindOf(RUNTIME_CLASS(CAnimal))) {if (yellowdog.IsKindOf(RUNTIME_CLASS(CDog))) {cout << "yellowdog is CDog" << endl;}else {cout << "yellowdog is not CDog" << endl;}return 0;
}

动态创建机制的使用

在不知道类名的情况下,将类的对象创建出来。

  1. 类必须派生自CObject
  2. 类内必须添加声明宏 DECLARE_DYNCREATE(theClass)
  3. 类外必须添加实现宏 IMPLEMENT_DYNCREATE(theClass,baseClass)

当一个类具备上述三个条件后,CRuntimeClass::CreateObject()对象加工厂函数就可以将类的对象创建出来。

代码示例

#include <afxwin.h>
#include <iostream>using namespace std;class CAnimal : public CObject {DECLARE_DYNAMIC(CAnimal)};
IMPLEMENT_DYNAMIC(CAnimal, CObject)class CDog : public CAnimal {DECLARE_DYNCREATE(CDog)};
IMPLEMENT_DYNCREATE(CDog, CAnimal)int main() {CObject* pob = RUNTIME_CLASS(CDog)->CreateObject();if (pob) {cout << pob << endl;} else {cout << "faile" << endl;}return 0;
}
http://www.dtcms.com/a/145954.html

相关文章:

  • C++ GPU并行计算开发实战:利用CUDA/OpenCL加速粒子系统与流体模拟
  • git比较不同分支的不同提交文件差异
  • Linux-网络基础
  • mindspeed-rl使用注意事项
  • 【ESP32】【微信小程序】MQTT物联网智能家居案例
  • Nginx下搭建rtmp流媒体服务 并使用HLS或者OBS测试
  • 相机标定(输出相机内参和畸变参数)
  • 前端实现数据导出成excel
  • RIP动态路由(三层交换机+单臂路由)
  • 【Markdown】【HTML】在Markdown中实现康奈尔笔记模式(右侧留白)
  • 百度暑期实习岗位超3000个,AI相关岗位占比87%,近屿智能携AIGC课程加速人才输出
  • ASP.NET Core 分层项目中EFCore的使用
  • 完美解决Microsoft Edge浏览器无法同步/一直在同步中/更新失败等问题
  • 神经网络直接逆控制:神经网络与控制的结合入门级结合
  • 【C#】.net core 6.0调用MVC API接口时,提示Unsupported Media Type,状态码415
  • 穿透数据迷雾:PR 曲线与 ROC 曲线的深度剖析+面试常见问题及解析
  • spring security +kotlin 实现oauth2.0 认证
  • 加油站小程序实战教程12显示会员信息
  • 【Django】设置让局域网内的人访问
  • 忽略 CS8616 警告在 Visual Studio 2022 中【C# 8.0 】
  • Halcon应用:相机标定之应用
  • AI助理iOS开发:Copilot for Xcode 下载与安装全指南
  • Spark-SQL与Hive集成及数据分析实践
  • Android15沉浸式界面顶部有问题
  • jinjia2将后端传至前端的字典变量转换为JS变量
  • TM1640学习手册及示例代码
  • 傲来云分享,负载均衡:提升网站性能与稳定性
  • 13.QT-DateTime Edit|Dial|Slider|日期计算器|调整窗口透明度|调整窗口大小|自定义快捷键(C++)
  • 在 UE5 编辑器中,由于游戏设置 -> EV100 设置,点击播放前后的光照不同。如何保持点击播放前后的光照一致?
  • 【HDFS入门】深入解析DistCp:Hadoop分布式拷贝工具的原理与实践