Изменяемая переменная связана с классом, а не объектом - PullRequest
0 голосов
/ 21 мая 2018

Допустим, у меня есть простой 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 голосов
/ 21 мая 2018

Вы должны реализовать конструктор для вашего класса, который инициализирует переменные-члены.Например,

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

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

        ...

};

Кроме того, write() следует увеличить counter перед возвратом, поэтому

    double write()
    {
        ++counter;
        return x;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...