簡體   English   中英

將數組從C ++構造函數傳遞給函數

[英]Passing arrays from C++ constructor to function

如果我有一個帶有包含數組的構造函數的類,並且想將此數組的每個成員傳遞給此類的函數以進行添加,該如何做呢?

例如構造函數的實現

person::person 
{
  double NoPerson[150]; //no of people  
  for(int j=0;j<=150;j++)
  {
    NoPerson[j]=1.00;//has to set to 1 pound
  }

  double person::aveWage(double NoPerson[])
  {
    double total;
    double NoPerson[150];

    using namespace std;

    for(int i=0;i<=150 ;i++)
    { 
      total=total+cashCus[i];
    }
    cout<<"total cash for all customers "<<total <<endl;
}

有人知道如何實現嗎?

它真的必須是一個數組嗎? 如果是這樣,則需要將大小一起傳遞,例如int add(int[] items, int size) 本教程介紹了數組的基礎知識: http : //www.cplusplus.com/doc/tutorial/arrays/

但是,數組更像是“普通C”。 如果您使用的是C ++,那么使用vector幾乎總是更好。

我不知道我是否理解正確,但是在我看來,您有一個要在構造函數中初始化然后在類中的其他函數中使用的數組( NoPerson )。

在那種情況下,您不應將其設置為局部變量,因為否則類中的其他函數將無法訪問它。 而是像函數一樣,使它成為類的成員變量。

像這樣:

class Person
{
public:
    Person()
        {
            for (int i = 0; i < 150; i++)
                NoPerson[i] = 1;
        }

    double total()
        {
            double total;

            for (int i = 0; i < 150; i++)
                total += NoPerson[i];

            return total;
        }

private:
    // Variables and functions in the 'private' section can only be
    // referenced by the function in this class.

    int NoPerson[150];  // This is a member variable
}

如上例所示,變量NoPerson是在類中定義的,而不是在函數中定義的 這使得該類中的所有函數都可以訪問它。

您的代碼有點壞。 實際上,您在代碼中有三個不同的數組,稱為“ NoPerson”,一個在構造函數中本地,一個是aveWage的參數,然后在aveWage中有一個本地聲明的NoPerson數組。 此外,您不使用數組做任何事情,並且當您離開構造函數時,構造函數中的數組將被刪除。 如果要使用NoPerson數組作為aveWage的參數從構造函數中調用aveWage,則可以執行此操作,但是aveWage中的本地聲明將對其進行屏蔽。

1)您的數組邊界錯誤(應該< 150 )。

2)在C ++ 98/03中,不能初始化成員數組; 在C ++ 11中,您可以(盡管初始化150個非零值很麻煩): person::person() : NoPerson{1., 1., 1.} { } (實際上是150個元素)。 (不過,這個問題不太可能在適當的設計修訂中仍然存在。)

3) aveWage循環可以用std::accumulate編寫(例如std::cout << "total = " << std::accumulate(cashCus, cashCus + 150, 0) << std::endl;目前,您的代碼破裂,因為您從未初始化total

暫無
暫無

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

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