2015-05-30 162 views
0

我想靜態計數我的驅動程序用戶。然而,它總是給我相同的值,而不是靜態int與數組C++

class Driver { 
private: 
    static int ID; 
    string name; 
public : 
    void displayDriver(string n) { 
    cout << ID << endl; 
    } 
    void createDriver(string n) { 
    name = n ; 
    ID++; 
    } 
} 

int Driver::id=0; 

int main() { 
    Driver driver[10]; 
    Driver[0].createDriver("first"); 
    Driver[1].createDriver("second"); 
    Driver[2].createDriver("first");     
    Driver[0].displayDriver(); 
    Driver[1].displayDriver(); 
    Driver[2].displayDriver(); 
} 

我的預期輸出應該是:

1 
2 
3 

但系統顯示我:

3 
3 
3 
+0

你確實要求它這樣做。 –

回答

4
private: 
static int ID; 

表示可能ID是其中Driver共享實例。對其進行的任何更改(從當前代碼中的createDriver)都將反映在所有實例中。如果您希望每個實例都有自己的唯一字段,請勿使用靜態字段。

1

做一些事情就像我在這裏展示,以獲得您期望的結果。我們的想法是保持ID中的下一個計數器,但每個實例都有自己的ID,當您創建驅動程序時,它們會被初始化。

class Driver 
{ 
    private: 
    static int ID; 
    int my_id; 
    string name; 
    public : 
    void displayDriver(string n) 
    { 
    cout << my_id << endl; 
    } 
    void createDriver(string n) 
    { 
    name = n ; 
    my_id = ID++; 
    } 
} 
int Driver::id=0; 
int main 
{ 
    Driver driver[10]; 
    Driver[0].createDriver("first"); 
    Driver[1].createDriver("second"); 
    Driver[2].createDriver("first");     
    Driver[0].displayDriver(); 
    Driver[1].displayDriver(); 
    Driver[2].displayDriver(); 
} 
0

這是因爲ID的值每增加一次就會增加createDriver(「」);

(無論對於哪個驅動程序[]),因爲它是一個靜態變量

所以UR遞增ID逐步至3中前3行 而在接下來的3行

要獲得顯示ID的值預期輸出

我覺得你需要嘗試這樣的:

Driver[0].createDriver(""); 
Driver[0].displayDriver(); 
Driver[1].createDriver(""); 
. 
. 
. 

等等!

請注意,所有驅動程序都有相同的ID(靜態字段)。