大家好,我是情报小哥~
1、所要解决的问题在前面的相同专辑文章中,跟大家介绍过虚函数,其中提到了基类的指针可以指向派生类,同时基类的引用也可以成为派生类的别名。
比如是非常经典的例子:
#include using namespace std;class parent{ public: virtual void print(void) { cout<
由于存在虚函数的重写,所以其函数调用都是跟随传入的对象类型,这就是多态;当然如果此例子中parent类中的print没有virtual虚函数标识,则编译器会认为传入的就是父类指针,从而只会调用父类的成员。
而从test1或者test2对象内部看来并不能知道传参是子类型还是父类型:
void test1(parent *ptr){ child* ptrchild = (child *)ptr; ptrchild->dosomething(); //调用派生类成员}如上代码如果传入的参数是子类对象,那么函数内部用子类类型指向该对象是正常运行的,但如果此时传入的是父类对象,而强制转化为子类指针来使用,则程序就有可能出现未知错误。
所以这里也引出来两个概念:静态类型与动态类型
静态类型: 即编译期间所确定的变量类型;
动态类型: 在运行过程中指针或者引用所指向对象的实际类型。
基于上面的风险,我们急需有一种手段来识别变量的动态类型,以进行相应的处理,我们通常叫其为:rtti(run-time type identification,运行时类型识别)
2、进行动态类型识别的方法进行动态类型识别的方法挺多的,比如利用多态对派生类进行相应id的标识等等,不过推荐还是采用typeid的方式。
typeid关键字能够获得任意变量的类型信息,也是c++专门提供用于类型识别的方式。
那么下面我们就用一个例程在看看typeid如何使用的:
#include #include using namespace std;class parent{ public: virtual void print(void) { cout<结果看每种指针或者引用的类型均可以动态且正确的获得识别,挺方便的。
最后有几点需要注意下:
1、typeid返回值是名为type_info的标准库类型的对象引用。
2、type_info的name返回的是一个字符串,且其类名与实际程序中类型不一定是一致的,但是肯定是唯一标识字符串,通过上面输出结果大家也是可以了解到的。
最 后好了,这里小哥就简单介绍了c++中动态识别机制的使用,本系列文章后续还会更新,记得关注学习哦。
2019年全球AI人才流动报告:球约有44%的AI人才在美国获得的博士学位
语音芯片WT2003H在学步车的应用
AtoX区块链体系结构及AXC代币功能的概述
QNED、MiniLED和MicroLED区别分析
2022中国半导体市场年会 芯海科技受邀分享PC主题报告
C++中动态类型的识别
德国HYDAC贺德克常用电子产品系列
hdmi转vga转换器和转换线的区别
为什么说没有完美的PLC,只有最合适的PLC?
新秀产品ft3128除了性价比,又有哪些特色呢?
机房动环监控系统组成设备与应用
微软正式入局自动驾驶行业
高标准企业级安全性,华为云会议为线上沟通保驾护航
紫光展锐推出5G射频前端解决方案,为智能手机带来更大设计空间
“旗舰杀手”3+32GB+1600+全金属+快充,仅863
经纬恒润前向毫米波雷达搭载江铃福特乘用车正式量产
三星折叠屏新品通过蓝牙认证 或为Galaxy X
SAS:字符型变量的两种排序方式
新能源汽车电池的种类有哪些,未来谁将是主流
长虹以AI为核心构建生态 推动“AI+IoT”融合发展