我正在尝试静态计算我的驱动程序用户。但它总是给我相同的价值
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 :(得分: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(静态字段)。