前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >技巧 | C++中实现类似instanceof的方法

技巧 | C++中实现类似instanceof的方法

作者头像
OpenCV学堂
发布2024-07-18 13:46:34
1490
发布2024-07-18 13:46:34
举报
文章被收录于专栏:贾志刚-OpenCV学堂

前言

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

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

使用typeid.name()方法

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

使用std::is_same方法

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

使用dynamic_cast

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

完整测试源代码

代码语言:javascript
复制
#include <typeinfo>
#include <type_traits>
#include <iostream>

using namespace cv;
using namespace std;

class Vehicles {
public:
    string make;
    string model;
    string year;
};

class Aircraft {
public:
    string make;
    string model;
    string year;
};

template <typename T>
void printType() {
    if (std::is_same<T, Aircraft>::value) {
        std::cout << "Type is Aircraft" << std::endl;
    }
    else if (std::is_same<T, Vehicles>::value) {
        std::cout << "Type is Vehicles" << std::endl;
    }
    else {
        std::cout << "Type is unknown" << std::endl;
    }
}

class Base {
public:
    virtual ~Base() {}  // Adding a virtual destructor for polymorphism
};
class Derived : public Base {
    // Class definition
};
int main(int argc, char** argv) {
    Base baseObj;
    Derived derivedObj;
    Base* ptrBase = &derivedObj;
    Derived* ptrDerived = dynamic_cast<Derived*>(ptrBase);
    if (ptrDerived) {
        std::cout << "Object is of type Derived" << std::endl;
    }
    else {
        std::cout << "Object is not of type Derived" << std::endl;
    }



    Vehicles car;
    Aircraft craft;
    const char* name1 = typeid(car).name();
    const char* name2 = typeid(craft).name();
    std::cout << "object name: " << name1 << std::endl;
    std::cout << "object name: " << name2 << std::endl;

    printType<Vehicles>();
    printType<Aircraft>();

    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档