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

时间:2013-12-26 10:01:04

标签: c++

提前感谢您的回复。

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();
        }

感谢。

编辑:现在研究载体。

1 个答案:

答案 0 :(得分:1)

首先,这里有一些可能会缓解你生活的事情(以及那些会阅读你代码的人的生活)。它会简化您的代码。因此,它将更容易理解和调试:

  • 为变量使用相关名称。

示例:

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中重新定义weightpowerWeapon(及其获取者),因为它已在{{1}中定义}

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

这意味着您可以删除第Item

  • 不要重新发明轮子。你最好使用Container(){;}而不是试图处理自己的指针和数组。

我很确定这最后的建议本身可以解决你的问题。特别是,如果使用std::vector,则不需要自己操纵指针。这意味着不再需要vector<Item>,也不再需要new