2013-04-14 34 views
0

我是新來的c + +,我不熟悉默認的構造函數。我被要求寫一個名爲Stats的類,並在默認構造函數中編寫一個構造函數,該構造函數使用隨機數生成器在minValue和maxValue之間生成sampleSize int,然後將其存儲在名爲data []的數組中。到目前爲止,每當我使用默認構造函數時,我只是將它們初始化爲零或爲空。我不確定如何用這些設置指令編寫默認構造函數,這樣我的代碼就可以正確運行而不會出錯。以下是我有默認構造函數C++隨機數有效嗎?

#include <iostream> 

using namespace std; 

class Stats 
{ 
private: 
    int sampleSize, minValue, maxValue; 
    int data[]; 

public: 
    Stats() 
    { 
     sampleSize = 0; 
     minValue = 0; 
     maxValue = 0; 
     data[] = sampleSize; 
    } 
    Stats(int samleSize, int min, int max) 
    { 
     samplesize = samleSize; 
     minValue = min; 
     maxValue = max; 
    } 
+0

你想'數據'持有什麼?你想將它初始化爲什麼?所以它被認爲是正確的。 – 2013-04-14 02:32:20

+0

那麼我想編寫一個構造函數,它使用隨機數生成minValue和maxValue之間的sampleSize整數,然後將其存儲在數據中,但我不確定在構造函數中如何寫入 –

回答

0

因此,我可以告訴你想要一個動態調整大小的數組int s在data舉行,你當前的語法是不正確的,但沿着這些行應該是你正在尋找的東西。首先data需要是pointer

int *data; 

,然後你的構造函數會是這個樣子:

Stats() 
{ 
    sampleSize = 0; 
    minValue = 0; 
    maxValue = 0; 
    data = NULL; 
} 

Stats(int samleSize, int min, int max) 
{ 
    sampleSize = samleSize; 
    minValue = min; 
    maxValue = max; 
    data = new int[sampleSize] ; 
} 

一旦你在你的類pointer你也需要有一個destructor,讓你可以釋放與該pointer相關聯的內存,它應該與此類似:

~Stats() 
{ 
    if(NULL != data) 
    { 
    delete [] data ; 
    } 
} 

這是假設你需要動態分配的內存,堅持你的任務,如果你被允許使用std::vector那麼這將成爲一個更簡單的問題,data變成這樣:

std::vector<int> data ; 

,你不必擔心分配在所有的,然後當你需要將數據添加到它,那麼你只需要調用push_back

data.push_back(randomNumber) ; 
0
data[] = sampleSize; 

無效的語法在C++中。你不能用它來初始化一個數組。

同時,data[]沒有類型。你應該做

int data[]; 

您還需要爲data陣列先分配內存,然後嘗試用隨機數發生器把數字進去。

0

您可以使用std::vector數據。由於大小不是固定的所有實例。

class Stats 
{ 
private: 
    int sampleSize, minValue, maxValue; 
    vector<int> data; 
    ^^^^^^^^^^^^^^^^ 

public: 
    Stats() 
    { 
     sampleSize = 0; 
     minValue = 0; 
     maxValue = 0; 
     data.reserve(sampleSize); // Just to avoid reallocations. 

    }