前言
C++有多态与继承,但是很多人开始学习C++,有时候会面临一个常见问题,就是如何向下转型,特别是不知道具体类型的时候,这个时候就希望C++ 可以向Java或者Python中有instanceof这个函数,可实际上C++中没有。但是别着急,其实C++中有两种简单的方法可以实现类似Java中的instanceof的功能。
在 C++ 中,确定对象的类型是编程中实际需求,使开发人员能够做出动态决策并执行特定于类型的操作。无论是在编译时检查类型,还是在运行时动态标识对象类型,C++ 都提供了强大的机制来获取类型信息
使用typeid.name()方法
寻找实例的类类型,代码演示如下:

使用std::is_same方法
代码实现与运行效果如下:

使用dynamic_cast
dynamic_cast方法转型是C++中一种非常杰出的方法。通过dynamic_cast操作符允许跨类层次结构动态转换指针和引用,从而在运行时确认和转换类型。代码演示如下:

完整测试源代码
1#include2#include 3#include 4 5usingnamespacecv; 6usingnamespacestd; 7 8classVehicles{ 9public: 10stringmake; 11stringmodel; 12stringyear; 13}; 14 15classAircraft{ 16public: 17stringmake; 18stringmodel; 19stringyear; 20}; 21 22template 23voidprintType(){ 24if(std::is_same ::value){ 25std::cout<< "Type is Aircraft" << std::endl; 26 } 27 else if (std::is_same ::value){ 28std::cout<< "Type is Vehicles" << std::endl; 29 } 30 else { 31 std::cout << "Type is unknown" << std::endl; 32 } 33} 34 35class Base { 36public: 37 virtual ~Base() {} // Adding a virtual destructor for polymorphism 38}; 39class Derived : public Base { 40 // Class definition 41}; 42int main(int argc, char** argv) { 43 Base baseObj; 44 Derived derivedObj; 45 Base* ptrBase = &derivedObj; 46 Derived* ptrDerived = dynamic_cast (ptrBase); 47if(ptrDerived){ 48std::cout<< "Object is of type Derived" << std::endl; 49 } 50 else { 51 std::cout << "Object is not of type Derived" << std::endl; 52 } 53 54 55 56 Vehicles car; 57 Aircraft craft; 58 const char* name1 = typeid(car).name(); 59 const char* name2 = typeid(craft).name(); 60 std::cout << "object name: " << name1 << std::endl; 61 std::cout << "object name: " << name2 << std::endl; 62 63 printType (); 64printType (); 65 66return0; 67}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
函数
+关注
关注
3文章
4423浏览量
68101 -
C++
+关注
关注
22文章
2139浏览量
77508 -
python
+关注
关注
59文章
4892浏览量
90460
原文标题:技巧 | C++中实现类似instanceof的方法
文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
C语言实现面向对象的方式 C++中的class的运行原理
这里主要介绍下在C语言中是如何实现的面向对象。知道了C语言实现面向对象的方式,再联想下,C++中
发表于 10-21 09:00
•1867次阅读
学习C++的方法以及C++的就业方向
学习方向:嵌入式+人工智能嵌入式是一门技术学习目标1.嵌入式开发概述;(面向对象在嵌入式开发中角色)2.嵌入式Linux C++编程;(C++概述、C++学习
发表于 12-24 07:32
密码编码学(加密方法的C与C++实现) pdf第二版
密码编码学(加密方法的C与C++实现)分分三个部分。第一部分描述密码学中的常用算法和数论算法,以及这些算法的
发表于 09-25 09:49
•0次下载
C++静态分析中对泛型构件的识别与表示方法
本文从C++静态分析的角度出发,介绍了模板和泛型构件技术、一个C++静态分析器实现中对模板和基本泛型构件的分析和识别方法、以及一种基于UML
发表于 08-17 11:16
•14次下载
如何利用C++也实现RMI功能
由于没有类似java的“反射”机制,标准C++下实现RMI似乎有些困难。为C++程序员所熟悉的Boost库虽然有RCF实现了
发表于 11-17 18:12
•14次下载
C++内部类的实现及应用
多重继承一直是C++语言中一个广受争议的语言特征。一般认为,在面向对象设计中应该谨慎使用多重继承。文章分析了C++中多重继承实现的复杂性并对
发表于 06-28 17:59
•50次下载
C++反编译中控制流图优化方法研究
控制流分块是反编译系统中基本的功能之一。介绍了控制流分块方法,分析了C++语言与C语言的区别,指出了现有的控制流分块方法用于
发表于 11-14 10:53
•10次下载
VISUAL C++教程之VISUAL C++的安装和使用方法
本文档的主要内容详细介绍的是VISUAL C++教程之VISUAL C++的安装和使用方法资料免费下载。
发表于 12-27 16:32
•20次下载
在C++中如何用虚函数实现多态
01 — C++虚函数探索 C++是一门面向对象语言,在C++里运行时多态是由虚函数和纯虚函数实现的,现在我们看下在C++
介绍在C++中实现回调的几种方法
在C++中的一个重要概念就是类,所以我们一般想让类的成员函数作为回调函数(如果直接用非类的成员函数作为回调函数,其实就和C语言中的方法一样),但是想
instanceof在java中的用法
instanceof是一个Java关键字,用于判断一个对象是否是某个类的实例,或者是其子类的实例。 instanceof的语法是: object instanceof class 其中,object
C++中实现类似instanceof的方法
评论