簡體   English   中英

將Class對象存儲在數組中

[英]Storing Class object in an array

請查看以下內容:

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,所以我們有int numberfItems為對象appleJuice設置為20等等等等。

同一類還具有以下方法:將numberOfItems減一的方法:

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

例如,如果調用以下內容:

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

那么程序將顯示正確的numberOfItmes ,它是19。另一方面,如果調用cout<<type[0].getNoOfItems() ,則它將顯示數字20。

這種行為使我認為appleJuicetype[0]是兩個單獨的對象。

我的問題是,有沒有一種方法可以創建對象數組而不需要像我一樣聲明對象並存儲在數組中?

謝謝。

您沒有存儲任何對象,因為您沒有創建任何對象。 這是一個函數聲明:

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<dispenserType>emplace_back元素。

appleJuicetype[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];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM