可变变量绑定到类,而不是对象

时间:2018-05-21 05:51:44

标签: c++ class attributes

假设我有一个简单的class,其write方法只需要输出类属性。其中包括一个名为counter的可变变量。每次调用方法write时,计数器都应递增。

问题是,counter与某个类绑定,而不是与特定对象绑定。如果我有两个相同类型的对象,并且如果我在第一个上调用write 3次,而在第二个上调用零,则计数器将具有相同的值。怎么解决这个问题?我猜它与构造函数有关。

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 3

1 个答案:

答案 0 :(得分:0)

您应该为您的类实现一个构造函数,用于初始化成员变量。例如。

class SomeClass
{
    private:
        double x;
        mutable int counter;

    public:
        SomeClass()
        :   x(0),
            counter(0)
        {
        }

        ...

};

此外,write()应在返回前增加counter,所以

    double write()
    {
        ++counter;
        return x;
    }