C++ 绑定到类而不是对象的可变变量
假设我有一个简单的C++ 绑定到类而不是对象的可变变量,c++,class,attributes,C++,Class,Attributes,假设我有一个简单的类,它有一个write方法,只需要输出类属性。其中有一个叫做计数器的可变变量。每次调用方法write时,计数器应递增 问题是,计数器绑定到类,而不是特定对象。如果我有两个相同类型的对象,并且如果我在第一个对象上调用write3次,但在第二个对象上调用0次,则计数器对这两个对象都具有相同的值。如何解决这个问题?我猜这和构造器有关 class SomeClass { double x; mutable int counter; public:
类
,它有一个write
方法,只需要输出类属性。其中有一个叫做计数器的可变变量。每次调用方法write
时,计数器应递增
问题是,计数器
绑定到类,而不是特定对象。如果我有两个相同类型的对象,并且如果我在第一个对象上调用write
3次,但在第二个对象上调用0次,则计数器对这两个对象都具有相同的值。如何解决这个问题?我猜这和构造器有关
class SomeClass
{
double x;
mutable int counter;
public:
double write()
{
return x;
++counter;
}
int counterValue()
{
return counter;
}
};
int main()
{
SomeClass c1, c2;
c1.write();
c1.write();
c1.write();
c1.counterValue();
c2.counterValue();
return 0;
}
输出:3你应该为你的类实现一个构造函数,初始化成员变量。例如
class SomeClass
{
private:
double x;
mutable int counter;
public:
SomeClass()
: x(0),
counter(0)
{
}
...
};
另外,write()
应该在返回之前递增计数器,所以
double write()
{
++counter;
return x;
}
您的代码无法编译。发布演示问题的真实代码。编辑后,您的代码仍然无法编译。你有没有试过编译你的代码?发布您测试过的真实代码,并展示您描述的问题。它只是代码的一小部分,现在可以编译了。但是它不会输出任何东西。它实际上也不会增加计数器。您没有验证您的代码是否再现了您所问的问题,阅读了有关创建的内容。@VishaalShankar OP可能由于未初始化的变量而误解了未定义行为的结果。我验证了,但对于每个对象,它仍然不单独计算,我认为在现阶段无法回答此问题。从所有这些评论中可以看出,OP顽固地拒绝创建和发布MCVE来展示和复制OP声称的观察结果。因此,一切帮助的努力都是徒劳的。