Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 绑定到类而不是对象的可变变量_C++_Class_Attributes - Fatal编程技术网

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声称的观察结果。因此,一切帮助的努力都是徒劳的。