如何解决为什么我不能将派生类对象存储在基类的 ARRAY 中然后进行动态转换? C++
这是我在 StackOverflow 中的第一个问题,我通常可以在网上找到我的问题的答案,但我无法解决这个问题。所以,我正在用 C++ 制作一个基于文本的游戏,我在其中使用了继承和多态性。我想将设备(派生)存储在项目(基础)清单中,然后使用 dynamic_cast 获取派生类的属性。我做了一个小例子,代表我正在尝试做什么以及可以做什么。 (请注意,我知道它是由对象切片引起的,我只是想了解为什么它不适用于数组但适用于其余部分)。
#include <iostream>
using namespace std;
class Equipment {
public:
int i = 20;
string s = "nothing here";
Equipment(){};
virtual ~Equipment(){};
};
class Weapon: public Equipment {
public:
int V = 900;
Weapon(){};
};
int main2(Equipment* e) {
Weapon& weapon3 = dynamic_cast<Weapon&>(*e);
cout << weapon3.V << endl;
return 0;
}
int setEquipment(Equipment* e) {
Equipment &equipment = *e;
Weapon& weapon2 = dynamic_cast<Weapon&>(*e);
Equipment* inventory;
inventory = new Equipment[3];
inventory[0] = *e;
Equipment &equipment2 = inventory[0];
Equipment inventory2[3];
inventory2[0] = equipment;
Equipment *inventory3[3];
inventory3[0] = &equipment;
inventory3[1] = e;
cout << weapon2.V << endl;
cout << "METHOD A: "; // WORKS FINE
main2(&equipment);
// cout << "METHOD B: "; // DOESN'T WORK
// main2(&equipment2);
// cout << "METHOD C: "; // DOESN'T WORK
// main2(&inventory[0]);
// cout << "METHOD D: "; // DOESN'T WORK
// main2(&inventory2[0]);
cout << "METHOD E: "; // IT ALSO WORKS!!!!!!
main2(inventory3[1]);
}
int main() {
Weapon weapon1;
setEquipment(&weapon1);
}
我想在我的代码中实现类似 METHOD C 的东西。我试图在我的实际代码中实现 METHOD E,但我收到了很多 bad_alloc 错误。 (所有对示例不起作用的方法都给我一个 std::bad_cast 错误)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。