首页 > 解决方案 > 与类相关的可变变量,而不是对象

问题描述

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

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

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

标签: c++classattributes

解决方案


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

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

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

        ...

};

另外,write()应该counter在返回之前增加,所以

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

推荐阅读