2011-11-10 93 views
0

如果我有一個帶有包含數組的構造函數的類,並且我想將此數組的每個成員傳遞給此類的函數,那麼我該怎麼做?將數組從C++構造函數傳遞到函數

例如構造函數實現

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

有誰知道如何可以做到這一點?

+0

首先你在循環中循環一對多!其次,爲什麼不把'NoPerson'變成類的成員變量? –

+0

編程的基本規則是「零,一,很多」。像「150」這樣的數字基本上不會出現在你的代碼中。 –

+0

@JoachimPileborg你有個例子嗎? – jis

回答

1

我寫不知道我是否理解你是對的,但在我看來,你有一個數組(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在的類中定義,而不是在功能。這使得該類中的所有功能都可以訪問它。

+0

但是如果我想讓其他類訪問這個變量 - noPerson呢? – jis

+0

然後,你必須讓全局變量。在頭文件中添加一個聲明('extern int NoPerson [];'),然後在需要變量的地方包含該頭文件。並在一個源文件中定義變量('int NoPerson [150];')。 –

0

你的代碼有點壞了。實際上,在代碼中實際上有三個不同的數組叫做'NoPerson',一個是構造函數的局部,一個是aveWage的參數,然後在AveWage中有一個本地聲明的NoPerson數組。此外,您不使用任何數組的數組,並且當您離開構造函數時,構造函數中的數組將被刪除。如果你想從NoPerson數組的構造函數中調用aveWage作爲aveWage的參數,你可以這樣做,但是aveWage中的本地聲明會掩蓋它。

+0

謝謝你,你一直很有幫助。 – jis

2

它真的必須是一個數組嗎?如果是這樣,你需要隨着尺寸一起通過,例如int add(int[] items, int size)。本教程涵蓋了數組的基礎知識:http://www.cplusplus.com/doc/tutorial/arrays/

但是,數組更多的是「純C」的東西。如果您使用的是C++,那麼使用vector幾乎總是更好。

0

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