预先感谢您的回复。
store() 是 Backpack 类的一个函数,它保存着一个指针数组(Item * items)。发送到 store() 的参数是正确的(通过用 cout 打印出来测试)。 displayInventory() 仍然在函数末尾打印前一个 Item 对象的成员。
void store(string & name, float weight, int power, int slot)
{
items[slot] = new Weapon(name, weight, power); // Weapon is a derived class of Item
this->displayInventory();
}
谢谢。
编辑:现在研究载体。
最佳答案
首先,这里有几件事情可能会减轻您的生活(以及那些将阅读您的代码的人的生活)。它会简化你的代码。因此,它将更容易理解和调试:
- 为您的变量使用相关的名称。
例子:
void store(string & name, float weight, int power, int slot)
{
items[slot] = new Weapon(name, weight, power);
numItems+=1;
this->getInventory();
}
- 为您的方法使用相关/一致的名称。
这里,很难理解getInventory()
的目的是什么因为它以 get
开头,但它的返回类型是 void
. (也许你的意思是 buildInventory()
?)
- 您无需在派生类中重新定义基类中已有的内容。
特别是你不需要重新定义 name
, weight
和 power
(和他们的 setter/getter )在 Weapon
,因为它已经在 Item
中定义了
- 如果您没有在类中定义任何构造函数,编译器将提供一个默认的不带参数的构造函数。
这意味着您可以删除行 Container(){;}
- 不要重新发明轮子。你最好使用
std::vector
而不是尝试自己处理指针和数组。
我很确定这最后一条建议本身可以解决您的问题。特别是,如果您使用 vector<Item>
,您将不再需要自己操作指针。这意味着没有更多 new
没有更多delete
.
关于c++ - 试图将一个新的派生对象分配给基类指针,但它似乎什么也没发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20782812/