从基类的向量中获取派生类的名称可以通过以下步骤实现:
以下是一个示例代码:
#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函数返回的是一个平台相关的字符串,可能不是人类可读的名称。在实际应用中,可以根据需要对返回的字符串进行处理,以满足特定的需求。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云