有一个基类warrior和其五个派生类lion wolf ninja icrman dragon,每次都会产生其中的一个武士,如何做到保存武士的位置信息,并且保存这是哪种武士,在以后能调用这种武士的特点c++
时间: 2024-02-16 12:05:32 浏览: 76
你可以考虑使用动态内存分配来实现这个需求。具体来说,你可以使用基类的指针来指向派生类对象,将指针存储在一个容器(如数组、向量等)中,这样就能保存每个派生类对象的位置和类型信息。当需要调用某种类型的武士时,只需要根据其类型从容器中获取相应的指针即可。下面是一些示例代码:
```c++
#include <iostream>
#include <vector>
using namespace std;
class Warrior {
public:
virtual void show() = 0;
};
class Lion : public Warrior {
public:
void show() override {
cout << "This is a lion." << endl;
}
};
class Wolf : public Warrior {
public:
void show() override {
cout << "This is a wolf." << endl;
}
};
class Ninja : public Warrior {
public:
void show() override {
cout << "This is a ninja." << endl;
}
};
class Icrman : public Warrior {
public:
void show() override {
cout << "This is an icrman." << endl;
}
};
class Dragon : public Warrior {
public:
void show() override {
cout << "This is a dragon." << endl;
}
};
int main() {
vector<Warrior*> warriors;
// 创建不同类型的武士对象
warriors.push_back(new Lion());
warriors.push_back(new Wolf());
warriors.push_back(new Ninja());
warriors.push_back(new Icrman());
warriors.push_back(new Dragon());
// 调用某种类型的武士对象
for (auto warrior : warriors) {
warrior->show();
}
// 释放动态分配的内存
for (auto warrior : warriors) {
delete warrior;
}
return 0;
}
```
在上面的示例代码中,我们定义了一个`Warrior`基类和五个派生类,分别是`Lion`、`Wolf`、`Ninja`、`Icrman`和`Dragon`。每个派生类都继承了`Warrior`基类,并重写了`show`方法。我们创建了不同类型的武士对象,并将它们的指针存储在一个向量中。在调用某种类型的武士时,我们使用了动态绑定(即虚函数)来调用相应的`show`方法,从而输出相应的信息。在程序结束时,我们需要释放动态分配的内存。
阅读全文