回想起3个月前,刚刚参加工作也做过类似的笔记,但只有2种方法,估计刚毕业没有什么墨水,经过3个月时间又多了2种方法:

这些方法都可用于RTTI

第一个方法是继承发(C++中很推荐用这个,感觉用这个结构会很清晰):

运行截图如下:

源码如下:

#include <iostream>
#include <assert.h>
using namespace std;#define  ONEMACRO 0
#define  TWOMACRO 1class Base{
public:enum MyType{One,Two,Three,Four,Five,Six};int getMyType()const{return m_type;}void setMyType(int type){m_type=type;}virtual ~Base(){cout<<"~Base() called!"<<endl;}int m_type;
};class ImplementOne:public Base{
public:ImplementOne(){setMyType(One);}~ImplementOne(){cout<<"~ImplementOne() called!"<<endl;}
};class ImplementTwo:public Base{
public:ImplementTwo(){setMyType(Two);}~ImplementTwo(){cout<<"~ImplementTwo() called!"<<endl;}
};void judgment(const Base *object){if(object->getMyType()==ONEMACRO){cout<<"MyType is One"<<endl;/************************************************************************//*                           want to do sth                              *//************************************************************************/}else if(object->getMyType()==TWOMACRO){cout<<"MyType is Two"<<endl;/************************************************************************//*                         want to do sth                              *//************************************************************************/}else{assert(!"The MyType is unnormal");}
}void main(){Base *object1=new ImplementOne;Base *object2=new ImplementTwo;judgment(object1);judgment(object2);delete object1;delete object2;getchar();
}

第二个方法是typeid法(个人还是不太喜欢用这个,可能是Qt的东西写多了【Qt中有很多可以替代这种方法】)

运行截图如下:

源码如下:

#include <iostream>
#include <typeinfo>
#include <assert.h>
#include <string>
using namespace std;class ImplementOne{};class ImplementTwo{};void main(){ImplementOne one;ImplementTwo two;if(strcmp(typeid(one).name(),"class ImplementOne")==0){cout<<"The class name is ImplementOne";}else{cout<<"he he!"<<endl;}getchar();
}

第三种方法是metaObject()->className()法,这种方法也超级简单

运行截图如下:

源码如下:

metaobject.h

#ifndef METAOBJECT_H
#define METAOBJECT_H#include <QObject>class Base:public QObject
{Q_OBJECT
public:Base(QObject *object=0);
};class Child:public QObject
{Q_OBJECT
public:Child(QObject *object=0);
};#endif // METAOBJECT_H

main.cpp

#include "metaobject.h"
#include <QApplication>
#include <QMetaObject>
#include <QDebug>int main(int argc, char *argv[])
{QApplication a(argc, argv);Base base;Child child;qDebug()<<base.metaObject()->className();qDebug()<<child.metaObject()->className();return a.exec();
}

metaobject.pp

#include "metaobject.h"Base::Base(QObject *object):QObject(object)
{}Child::Child(QObject *object):QObject(object)
{}

第四种方法也是Qt专有的Q_CLASSINFO法

在此不再重复,

Qt文档阅读笔记-Q_CLASSINFO官方解析与实例

https://blog.csdn.net/qq78442761/article/details/83006645

本人的这篇博文已经写出来了!

C/C++|Qt工作笔记-4种方法判断当前对象(类)名或标识(继承发,typeid法,元对象className()法,Q_CLASSINFO法)相关推荐

  1. Qt工作笔记-两种方法从容器中筛选出父类和子类(继承法、typeid法)

    两种方法程序运行界面效果都一样! 程序运行截图如下: 这个图随便看看就可以了,没啥用! 代码如下: widget.h #ifndef WIDGET_H #define WIDGET_H#include ...

  2. Qt工作笔记-三种方式解决Qt5中文编码问题

    目录 前言 方式一 方式二 方式三 三种方式解决Qt5中文编码问题 前言 这里不谈原理,只说如何去做! 这里本人自己总结下,今天遇到了新的编码问题,在此记录下,方面以后快速调用. 把这三种方法顺序试下 ...

  3. C++工作笔记-3种方法对数据类型进行拆分(可用于各种协议)

    比如用Long Long存3个数据的内容. 这里要知道大小端的知识点. 方法一是用位运算: 方法二是用指针: 方法三是结构体(本质上也是指针): 运行截图如下: 源码如下: main.cpp #inc ...

  4. Qt工作笔记-在界面上输出变量、类、this指针的地址

    思路: 地址就一4字节数,把其转10进制,再转成16进制就可以在界面上显示了. 程序运行截图如下: 源码如下: widget.h #ifndef WIDGET_H #define WIDGET_H#i ...

  5. Qt工作笔记-发送端发送Json格式的数据包,接收端解析数据包

    原理以及运行 原理是因为QJsonDocument提供了一个函数toJson 可以直接把Json数据转成QByteArray,这样就可以直接发送数据包,然后再按照常规方法解析即可,本源码中含解析内容, ...

  6. Python语言学习:基于python五种方法实现使用某函数名【func_01】的字符串格式('func_01')来调用该函数【func_01】执行功能

    Python语言学习:基于python五种方法实现使用某函数名[func_01]的字符串格式('func_01')来调用该函数[func_01]执行功能 目录 问题提出 代码五种设计思路 T1方法:e ...

  7. python比较两个二进制文件_python三种方法判断文件是否为二进制文件

    两种方法判断文件是否为二进制文件,最准确的就是把这两种方法结合起来. (1)方法一: 它首先检查文件是否以BOM开始,如果不在初始8192字节内查找零字节: import codecs file_pa ...

  8. python 子串是否在字符串中_python七种方法判断字符串是否包含子串

    1. 使用 in 和 not in in 和 not in 在 Python 中是很常用的关键字,我们将它们归类为 成员运算符. 使用这两个成员运算符,可以很让我们很直观清晰的判断一个对象是否在另一个 ...

  9. js之删除对象属性的三种方法 判断对象中是否有某一属性的四种方法

    js之删除对象属性的三种方法 & 判断对象中是否有某一属性的四种方法 示例 1.基础版 var a = { id: 18, age: 20, name: "zhangsan" ...

最新文章

  1. node.js入门 - 2.创建一个简单聊天室
  2. 设计模式-观察者模式 实现
  3. jfinal mysql date,jfinal与mysql数据类型拾掇大全
  4. 将Android源码集成到Eclipse中的方法
  5. MATLAB xlswrite函数出现“错误: 服务器出现意外情况”
  6. 广东制造按下加速键  千家中小企业上阿里云工业互联网
  7. java里的日期时间
  8. mysql中修改表的还原命令_MySQL的增、删、改、查和备份、恢复的命令
  9. discuz自动添加兼容html5标签的音乐播放器
  10. PowerShell 使用当前日期创建文件夹
  11. 单片机c语言1602怎么接线,lcd1602中文资料分享:lcd1602接线图_lcd1602与单片机连接图 - 全文...
  12. SOP封装的后缀字母L M N都代表什么意思?
  13. C语言程序设计第六次作业
  14. SIGIR20|LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation
  15. 一阶二阶数字滤波器笔记
  16. java 同步数据,同步数据到另一个库中。
  17. Windows环境下OpenSSL下载安装及制作证书
  18. 用全站 CDN 部署 Discourse 论坛
  19. 【文献阅读】VAQF: Fully Automatic Software-Hardware Co-Design Framework for Low-Bit Vision Transformer
  20. html横向导航栏滑动效果,用css3如何实现导航栏横向拖曳滚动

热门文章

  1. 如何手工完全卸载SQL SERVER 2000数据库
  2. RMI和WebService
  3. 万能文件在线预览项目,开源!
  4. 数据库最最常用语句(10年工作笔记)
  5. XMPP 扎金花各种网络传送之音频发送
  6. 童年的飞秋大门已徐徐向我关闭
  7. 飞鸽传书2012发展触摸屏技术发展迅猛
  8. 构建自己的服务器有什么好处呢?
  9. 飞鸽传书要是懒惰就会长胖
  10. 测试结果表明开车打手机比酒后开车更危险