繁体   English   中英

尝试将新的派生对象分配给基类指针,但似乎没有任何反应

[英]Trying to assign a new derived object to a base class pointer but it seems to act like nothing happened

预先感谢您的答复。

store()是Backpack类的一个函数,该类保存着一个指针数组(Item *项目)。 发送到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() ?)

  • 您无需在派生类中重新定义基类中已有的内容。

特别是,您不需要在Weapon重新定义nameweightpower (及其吸气剂),因为它已经在Item定义了

  • 如果您没有在类中定义任何构造函数,则编译器将提供一个默认的不带参数的构造函数。

这意味着您可以删除行Container(){;}

  • 不要重新发明轮子。 您最好使用std::vector而不是尝试自己处理指针和数组。

我敢肯定,这最后的建议本身可以解决您的问题。 特别是,如果使用vector<Item> ,则不再需要自己处理指针。 这意味着不再有new ,也没有delete

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM