0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C++中实现类似instanceof的方法

OpenCV学堂 来源:OpenCV学堂 2024-07-18 10:16 次阅读

前言

C++有多态与继承,但是很多人开始学习C++,有时候会面临一个常见问题,就是如何向下转型,特别是不知道具体类型的时候,这个时候就希望C++ 可以向Java或者Python中有instanceof这个函数,可实际上C++中没有。但是别着急,其实C++中有两种简单的方法可以实现类似Java中的instanceof的功能。

在 C++ 中,确定对象的类型是编程中实际需求,使开发人员能够做出动态决策并执行特定于类型的操作。无论是在编译时检查类型,还是在运行时动态标识对象类型,C++ 都提供了强大的机制来获取类型信息

使用typeid.name()方法

寻找实例的类类型,代码演示如下:

2e1a5748-44a6-11ef-b8af-92fbcf53809c.png

使用std::is_same方法

代码实现与运行效果如下:

2e323b6a-44a6-11ef-b8af-92fbcf53809c.png

使用dynamic_cast

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

2e559fec-44a6-11ef-b8af-92fbcf53809c.png

完整测试源代码

 1#include
 2#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

    文章

    4329

    浏览量

    62583
  • C++
    C++
    +关注

    关注

    22

    文章

    2108

    浏览量

    73632
  • python
    +关注

    关注

    56

    文章

    4795

    浏览量

    84646

原文标题:技巧 | C++中实现类似instanceof的方法

文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言实现面向对象的方式 C++的class的运行原理

    这里主要介绍下在C语言中是如何实现的面向对象。知道了C语言实现面向对象的方式,再联想下,C++
    发表于 10-21 09:00 1134次阅读

    C/C++调用Java不同类的静态方法有哪些

    C/C++调用Java不同类的静态方法有哪些?C/C++
    发表于 09-30 08:12

    学习C++方法以及C++的就业方向

    学习方向:嵌入式+人工智能嵌入式是一门技术学习目标1.嵌入式开发概述;(面向对象在嵌入式开发角色)2.嵌入式Linux C++编程;(C++概述、C++学习
    发表于 12-24 07:32

    密码编码学(加密方法CC++实现) pdf第二版

    密码编码学(加密方法CC++实现)分分三个部分。第一部分描述密码学的常用算法和数论算法,以及这些算法的
    发表于 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次下载
    <b class='flag-5'>C++</b>内部类的<b class='flag-5'>实现</b>及应用

    C++反编译控制流图优化方法研究

    控制流分块是反编译系统基本的功能之一。介绍了控制流分块方法,分析了C++语言与C语言的区别,指出了现有的控制流分块方法用于
    发表于 11-14 10:53 10次下载
    <b class='flag-5'>C++</b>反编译<b class='flag-5'>中</b>控制流图优化<b class='flag-5'>方法</b>研究

    C++程序在Visual_C++6.0编译系统实现

    C++程序在Visual_C++6.0编译系统实现
    发表于 05-04 11:09 1次下载

    VISUAL C++教程之VISUAL C++的安装和使用方法

    本文档的主要内容详细介绍的是VISUAL C++教程之VISUAL C++的安装和使用方法资料免费下载。
    发表于 12-27 16:32 19次下载
    VISUAL <b class='flag-5'>C++</b>教程之VISUAL <b class='flag-5'>C++</b>的安装和使用<b class='flag-5'>方法</b>

    EE-112:模拟C++的类实现

    EE-112:模拟C++的类实现
    发表于 05-27 16:13 2次下载
    EE-112:模拟<b class='flag-5'>C++</b><b class='flag-5'>中</b>的类<b class='flag-5'>实现</b>

    C++如何用虚函数实现多态

    01 — C++虚函数探索 C++是一门面向对象语言,在C++里运行时多态是由虚函数和纯虚函数实现的,现在我们看下在C++
    的头像 发表于 09-29 14:18 1695次阅读

    虚拟机的设计与实现:C\C++

    虚拟机的设计与实现:C\C++
    发表于 02-21 15:10 0次下载

    介绍在C++实现回调的几种方法

    C++的一个重要概念就是类,所以我们一般想让类的成员函数作为回调函数(如果直接用非类的成员函数作为回调函数,其实就和C语言中的方法一样),但是想
    的头像 发表于 01-18 15:09 3707次阅读

    instanceof在java的用法

    instanceof是一个Java关键字,用于判断一个对象是否是某个类的实例,或者是其子类的实例。 instanceof的语法是: object instanceof class 其中,object
    的头像 发表于 11-21 10:25 2629次阅读