首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从基类的向量中获取派生类的名称

从基类的向量中获取派生类的名称可以通过以下步骤实现:

  1. 遍历基类的向量,逐个获取向量中的元素。
  2. 对于每个元素,使用类型转换操作符将其转换为派生类的指针或引用。
  3. 使用转换后的指针或引用,调用派生类的成员函数或属性。
  4. 在派生类的成员函数或属性中,可以通过typeid运算符获取派生类的类型信息。
  5. 使用type_info对象的name()函数可以获取派生类的名称。

以下是一个示例代码:

代码语言:txt
复制
#include <iostream>
#include <vector>
#include <typeinfo>

class Base {
public:
    virtual ~Base() {}
};

class Derived1 : public Base {
public:
    void printName() {
        std::cout << "Derived1" << std::endl;
    }
};

class Derived2 : public Base {
public:
    void printName() {
        std::cout << "Derived2" << std::endl;
    }
};

int main() {
    std::vector<Base*> vec;
    vec.push_back(new Derived1());
    vec.push_back(new Derived2());

    for (Base* obj : vec) {
        if (Derived1* derived1 = dynamic_cast<Derived1*>(obj)) {
            derived1->printName();
            const std::type_info& typeInfo = typeid(*derived1);
            std::cout << "Derived class name: " << typeInfo.name() << std::endl;
        }
        else if (Derived2* derived2 = dynamic_cast<Derived2*>(obj)) {
            derived2->printName();
            const std::type_info& typeInfo = typeid(*derived2);
            std::cout << "Derived class name: " << typeInfo.name() << std::endl;
        }
    }

    // 清理内存
    for (Base* obj : vec) {
        delete obj;
    }

    return 0;
}

这个示例代码中,我们定义了一个基类Base和两个派生类Derived1和Derived2。然后创建了一个存储Base指针的向量vec,并将Derived1和Derived2的实例添加到向量中。通过遍历向量,我们使用dynamic_cast将基类指针转换为派生类指针,并调用派生类的printName函数打印名称。接着使用typeid运算符获取派生类的类型信息,并使用type_info对象的name函数获取派生类的名称。

请注意,type_info对象的name函数返回的是一个平台相关的字符串,可能不是人类可读的名称。在实际应用中,可以根据需要对返回的字符串进行处理,以满足特定的需求。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云产品:https://cloud.tencent.com/product
  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 人工智能平台(AI Lab):https://cloud.tencent.com/product/ai
  • 物联网(IoT Hub):https://cloud.tencent.com/product/iothub
  • 移动开发平台(MTP):https://cloud.tencent.com/product/mtp
  • 对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯区块链服务(TBCS):https://cloud.tencent.com/product/tbcs
  • 腾讯云元宇宙(Tencent Cloud Metaverse):https://cloud.tencent.com/solution/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券