std::vector<std::vector<Warrior*>> myArray(5, std::vector<Warrior*>(5));warrior是一个基类,数组中每个元素为其派生类,如何不使用typeid确定他是哪种派生类
时间: 2024-01-20 08:02:19 浏览: 82
如果你想要在不使用`typeid`的情况下确定一个指向基类的指针所指向的对象的派生类类型,你可以使用虚函数。具体来说,你可以在基类中定义一个虚函数,然后在每个派生类中覆盖这个虚函数,以便在运行时获取对象的派生类类型。
例如,你可以在`Warrior`类中定义一个虚函数`getType()`,然后在每个派生类中覆盖这个函数,返回该派生类的类型。具体的实现如下:
```
#include <iostream>
#include <vector>
class Warrior {
public:
virtual std::string getType() const { return "Warrior"; }
};
class DerivedClass1 : public Warrior {
public:
std::string getType() const override { return "DerivedClass1"; }
};
class DerivedClass2 : public Warrior {
public:
std::string getType() const override { return "DerivedClass2"; }
};
int main() {
std::vector<std::vector<Warrior*>> myArray(2, std::vector<Warrior*>(2));
myArray[0][0] = new DerivedClass1();
myArray[0][1] = new DerivedClass2();
myArray[1][0] = new DerivedClass2();
myArray[1][1] = new DerivedClass1();
// 遍历数组中的每个元素,输出其类型
for (auto& row : myArray) {
for (auto& warrior : row) {
std::cout << warrior->getType() << " ";
}
std::cout << std::endl;
}
return 0;
}
```
在这个例子中,`Warrior`类中定义了一个虚函数`getType()`,返回字符串"Warrior"。`DerivedClass1`和`DerivedClass2`中都覆盖了这个函数,返回它们自己的类名。
在`main()`函数中,我们创建了一个二维vector,其中每个元素都是`Warrior`类的派生类。然后,我们遍历数组中的每个元素,并调用其`getType()`函数来获取其派生类类型,并输出到控制台上。
这样,你就可以在运行时获取对象的派生类类型,而不需要使用`typeid`操作符。
阅读全文