visual C++-试图将每个子类指向主类,以便在向量中包含所有信息

visual C++ - trying to point each sub-class to the main class in order to contain all information in a vector

本文关键字:向量 信息 包含所 C++- 子类 visual      更新时间:2023-10-16

基本上,我正在为游戏编写一个小型数据库/库存系统。物品类及其子类(武器、盔甲、消耗品等)终于全部启动并工作了。我的库存向量是在一个单独的库存类中编写的(允许多个库存,即敌人也可以拥有它们

但我一步一个脚印,因为这是一次学习经历。

基本上,我相信在这种情况下,指针就是答案。这个代码似乎有效(还没有尝试)

Weapon DebugDagger{ 1, "Debug Dagger", "Debug Dagger given to you by Help", 25 };
Armor DataCloak{ 2, "Data Cloak", "Data Cloak given to you by Help", 10 };
Item *pItem = &DebugDagger;
Weapon *pWeapon = &DebugDagger;
InventoryManager PlayerInv;
PlayerInv.pickupItem(pWeapon);`

在这种情况下,pickupItem(Item*)采用一种静态的物品类型,这是我的功能的基类,其中添加到库存中的武器是一个子类(class Weapon : public Item{})

写这篇文章的方式似乎是拼凑出一个解决方案,但如果我能把指针写进类函数本身,这样在子类中创建的每个项目都会自动创建一个指向基类的指针,这样我就可以把它添加到库存子系统中,这会容易得多。有没有办法在课堂上做到这一点?以便每个成员在创建类时自动创建一个指针?当我试图在构造函数中使用name变量来实现这一点时,它不起作用,因为我似乎必须在创建指针之前创建成员,所以我不知道如何在创建新成员的同时进行创建。

我的意思是,我完全支持其他比std::矢量清单更有效的想法;对于清单-我认为一些实际上可以简单地接受任何类的成员并记录他们的函数从长远来看会更有效,但我不认为这是可能的-我认为从子类创建指向Item的指针仍然是必要的-因为实际上,它是所有项,每个子函数都有一个额外的说明符,只用于它自己的函数,武器有攻击,消耗品有恢复等等,以及它的所有整数,所以实际上它们几乎是相同的,但由于功能的原因,比如装备、使用、分类,它们每个都有一种单独的类型。我想我本可以创建一个SpecialItem子类来覆盖所有这些,但这将是非常模糊的,并且如果某个特定类型稍后需要修改,则几乎没有创新的空间。

我只是不知道是否还有其他选择。如果有直接的我,我会贪婪地阅读,直到我找到理解它。

不确定我是否得到了要点,但指向子类(Weapon)的指针已经是指向基类(Item)的指针了。

因此,您可以将所有物品(武器:物品,阿诺:物品,…)存储在中

std::vector<Item*> Inventory

它似乎不是这样工作的,因为默认情况下没有创建指针,在这种情况下,我必须在创建Item后立即写一个指针,以便将其推送回。

否则,它告诉我类武器不能转换为项目*和不会编译。

所以在我看来,我不能把它们存储到向量中——要想做到这一点,就必须是

std::vector<Weapon*> Inventory

基本上我需要的功能

std::vector<Weapon*> Inventory
std::vector<Armor*> Inventory2
std::vector<Consumable*> Inventory3
std::vector<Item*> Inventory4

除了我需要它在一个单一的库存类。。。

我现在的问题是我只有std::矢量,并且不允许将任何其他类类型插入此插槽,因为我必须手动转换类型(因为内存无法单独转换,所以必须删除特殊特性),或者创建一个指向Item*的指针,这样当我插入这样的指针时:

Inventory.push_back(POINTER);

它会相信武器是一个物品,并继续行动。

否则

Inventory.push_back(WEAPON), etc do not work... only Inventory.push_back(Item*)

我不知道这是否已经更清楚了,但这应该可以理解我为什么需要指针。由于我不能将Weapon甚至Weapon*投射为Item,所以我必须在类函数中的某个位置创建一个指向Item的指针,这样我就有了一些变量,我可以自动弹出到类本身成员的push_back函数中——我必须将武器或魔药伪装为基本物品,以便使其适合向量,因为它只接受基本项目。

不管怎样,代码最终都是非功能的。

不管怎样,我需要一种方法来创建每种类型类的所有成员的数据库。

我需要一个向量的功能,它可以处理任何类型——或者一个让向量接受任何类型的方法。

我放弃了这个方法,因为只有一个向量是行不通的。

现在,我正在研究一个由获得的物品名称、数量和ID组成的3向量类。

弄清楚如何关联3,并同时扫描它们以使数据有意义,似乎有点**(即,查看物品名称x,id 32是否在库存中,如果是,则允许用户检查此类物品的详细信息)。

这真的是我的第一个大项目。这对我来说太糟糕了。