有一个基类wariror,里面有weapon*类型的vector数组,在主函数中每次会产生warrior*类型派生类lion类型的对象,每次产生对象时都会往weapon数组添加元素,如何对里面的元素排序
时间: 2024-02-22 20:56:24 浏览: 70
可以在基类 `warrior` 中添加一个排序函数,然后在每次往 `weapon` 数组添加元素时调用该函数进行排序。
以下是一个示例代码:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class weapon {
public:
int damage;
weapon(int d): damage(d) {}
};
class warrior {
public:
vector<weapon*> weapons;
virtual void addWeapon(weapon* w) {
weapons.push_back(w);
sortWeapons();
}
virtual void sortWeapons() {
sort(weapons.begin(), weapons.end(), [](weapon* a, weapon* b) {
return a->damage > b->damage;
});
}
};
class lion : public warrior {
public:
virtual void addWeapon(weapon* w) override {
warrior::addWeapon(w);
cout << "Lion's weapon list:" << endl;
for (auto weapon : weapons) {
cout << weapon->damage << " ";
}
cout << endl;
}
};
int main() {
warrior* w = new lion();
w->addWeapon(new weapon(10));
w->addWeapon(new weapon(5));
w->addWeapon(new weapon(8));
delete w;
return 0;
}
```
这里我们在 `warrior` 类中添加了 `sortWeapons` 函数,使用 `sort` 函数对 `weapons` 数组进行排序。同时,在 `lion` 类中覆盖了 `addWeapon` 函数,在添加完武器后输出当前武器列表。
在主函数中,我们创建了一个 `lion` 类型的对象,并向其添加了三个不同伤害的武器。在程序运行时,会输出以下内容:
```
Lion's weapon list:
10
Lion's weapon list:
10 5
Lion's weapon list:
10 8 5
```
可以看到,每次添加武器后,程序都会对武器列表进行排序。
阅读全文