【问题标题】:Storing Class object in an array将类对象存储在数组中
【发布时间】:2014-04-12 08:19:26
【问题描述】:

请看以下内容:

dispenserType type[4];
dispenserType appleJuice();
type[0] = appleJuice;
dispenserType orangeJuice();
type[1] = orangeJuice;
dispenserType mangoLassi();
type[2] = mangoLassi;
dispenserType fruitPunch();
type[3] = fruitPunch;

如您所见,我在 type 数组中存储了不同的对象。

dispenserType 类有一个构造函数,将项目数设置为 20。 所以我们将对象appleJuiceint numberfItems 设置为20,依此类推。

同一类还有以下方法:将numberOfItems减一的方法:

void dispenserType::makeSale()
{
    numberOfItems--;
}
int dispenserType::getNoOfItems() const
{
    return numberOfItems;
}

如果例如调用以下内容:

appleJuice.makeSales
cout << appleJuice.getNoOfItems() << endl;

那么程序会显示右边的numberOfItmes,也就是19。另一方面,如果cout&lt;&lt;type[0].getNoOfItems()被调用,那么它会显示数字20。

这种行为让我认为appleJuicetype[0] 是两个独立的对象。

我的问题是,有没有一种方法可以创建一个对象数组,而无需像我所做的那样声明一个对象并存储在一个数组中?

谢谢。

【问题讨论】:

  • 您的代码甚至不应该编译。可以贴一些实际的代码,包括type的声明吗?

标签: c++ arrays class object


【解决方案1】:

您没有存储任何对象,因为您没有创建任何对象。这是一个函数声明:

dispenserType appleJuice();

你需要

dispenserType appleJuice;

dispenserType appleJuice{}; // C++11

一旦你解决了这个问题,那么是的,这样做

type[0] = appleJuice;

appleJuice 的值分配给一个已经存在的对象type[0]。和说的一样

dispenserType a;
dispenserType b;

b = a;  // b and a are different objects

我的问题是,有没有一种方法可以创建一个对象数组,而无需像我所做的那样声明一个对象并存储在一个数组中?

对于一个普通的数组,唯一的方法就是使用一个初始化列表,因为一旦它被初始化,你所能做的就是修改它现有的元素。所以

dispenserType type[3] = { dispenserType(args), 
                          dispenserType(other args), 
                          dispenserType(other args) };

另一种方法是在其中构造std::vector&lt;dispenserType&gt;emplace_back 元素。

【讨论】:

  • 感谢您的回复。
【解决方案2】:

你是对的,type[0]appleJuice 是两个不同的对象。

选项 #1 - 您可以使用对象数组而无需克隆每个对象:

dispenserType type[4];

选项 #2 - 您可以使用指针数组而不是对象数组:

dispenserType* type[4];
for (int i=0; i<sizeof(type)/sizeof(*type); i++)
    type[i] = new dispenserType();

当然,您必须在稍后执行期间删除每个分配的对象:

for (int i=0; i<sizeof(type)/sizeof(*type); i++)
    delete type[i];

【讨论】:

  • 感谢您的回复。
  • @user3397856:没问题。它对您解决问题有帮助吗?
  • @user3397856:太好了,很高兴能帮到你。您可以通过单击旁边的 V 来接受答案(仅当它确实回答了您的问题时)。
猜你喜欢
  • 1970-01-01
  • 2011-11-11
  • 2017-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-21
  • 1970-01-01
相关资源
最近更新 更多