c++ - 试图将一个新的派生对象分配给基类指针,但它似乎什么也没发生

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

谢谢。

编辑:现在研究载体。

最佳答案

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

  • 为您的变量使用相关的名称。

例子:

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 , weightpower (和他们的 setter/getter )在 Weapon ,因为它已经在 Item 中定义了

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

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

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

我很确定这最后一条建议本身可以解决您的问题。特别是,如果您使用 vector<Item> ,您将不再需要自己操作指针。这意味着没有更多 new没有更多delete .

关于c++ - 试图将一个新的派生对象分配给基类指针,但它似乎什么也没发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20782812/

相关文章:

c++ - 为什么获取网站源码时会出现特殊字符? C++

c++ - 2 条件的倍数不起作用(反问题)

c++ - QProgressdialog : busy waiting bar is not moving while function is executing

C++ 创建文件时出错(名称基于其他文件名)

c++ - C/C++ 中的函数式编程?

c++ - C++中退出进程的不同方式

c++ - 为什么我不能在另一个文件中重载 << 运算符?

c++ - 如何在 C++ 中使用对索引加速映射?

c++ - 食人魔构建 gcc 4.7

c++ - 确定窗口是否在桌面范围内 C++