带有数组C ++的静态int

时间:2015-05-30 02:59:41

标签: 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

3 个答案:

答案 0 :(得分:4)

private:
 static int ID;

表示在ID个实例之间共享Driver。对它的任何更改(来自当前代码中的createDriver)都将反映在所有实例中。如果您希望每个实例都有自己的唯一字段,请不要使用静态字段。

答案 1 :(得分: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();
}

答案 2 :(得分:0)

这是因为每次使用createDriver(&#34;&#34;)时,ID的值都会增加;

(无论哪个Driver [])因为它是一个静态变量

因此,您可以逐步将ID递增到前3行中的3 同时在接下来的3行显示ID的值

获得预期的输出

我想你需要这样试试:

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

等等!

请注意,所有驱动程序都具有相同的ID(静态字段)。