有一个基类warrior和其五个派生类,如何用vector二维数组保存信息,并且数组的每个元素是warrior的一个派生类
时间: 2024-02-17 08:01:15 浏览: 78
详解C++中基类与派生类的转换以及虚基类
可以使用 `std::vector` 嵌套的方式来实现二维数组的保存,每个元素可以是一个指向 `warrior` 基类的指针,指向对应的派生类对象。
例如:
```C++
#include <vector>
class warrior {
public:
virtual ~warrior() {}
virtual void attack() = 0;
};
class warriorA : public warrior {
public:
void attack() override {}
};
class warriorB : public warrior {
public:
void attack() override {}
};
// ...
int main() {
std::vector<std::vector<warrior*>> warriors;
// 初始化 warriors
warriors.resize(5);
for (int i = 0; i < 5; ++i) {
warriors[i].resize(10);
for (int j = 0; j < 10; ++j) {
if (j % 2 == 0) {
warriors[i][j] = new warriorA();
} else {
warriors[i][j] = new warriorB();
}
}
}
// 使用 warriors
for (int i = 0; i < 5; ++i) {
for (int j = 0; j < 10; ++j) {
warriors[i][j]->attack();
}
}
// 释放 warriors
for (int i = 0; i < 5; ++i) {
for (int j = 0; j < 10; ++j) {
delete warriors[i][j];
}
}
return 0;
}
```
在上述代码中,我们使用了 `std::vector<std::vector<warrior*>>` 来保存二维数组,每个元素为 `warrior*` 类型,即一个指向 `warrior` 基类的指针。在初始化 `warriors` 的时候,我们根据需要创建对应的派生类对象并赋值给 `warriors` 中的元素,使用时可以通过指针调用对应的虚函数,最后再释放 `warriors` 中的内存。
阅读全文