2015-05-30 117 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(静态字段)。