Как изменить член класса в методе, объявленном как const - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть класс, который дает значение за соответствующее время. У меня есть метод, который изменяет m_time (в чч, мм, сс) [мс] , но в конце объявляется как const. Поэтому мне нужно изменить атрибут m_time, но я не могу! как я мог go обойти это?

Вот мой код:

class CMeasurementValue
{
private:
    double m_value;
    unsigned int m_time;

public:
    CMeasurementValue(double value=0,unsigned int time=0);
    CMeasurementValue(double value,unsigned int hh,unsigned int mm , double ss);
    double getValue() const ;
    unsigned int getTime() const;
    void calculateTime(unsigned int& hh , unsigned int& mm , double& ss ) const;
    bool operator <(const CMeasurementValue& rop)const ;
    friend ostream& operator <<( ostream& out, const CMeasurementValue& rop);
    void print();
};

void CMeasurementValue::calculateTime(unsigned int& hh , unsigned int& mm , double& ss) const
{
    // ??
}

Ответы [ 2 ]

0 голосов
/ 07 февраля 2020

Объявите его как

mutable unsigned int m_time;

См. Когда вы использовали ключевое слово mutable в C ++?

Но упомянутая вами функция, кажется, является мутатором, а не средством доступа, поэтому Почему вы объявили это как const?

В чем разница Аксессоры и мутаторы C ++

0 голосов
/ 07 февраля 2020

Вы можете объявить своего участника m_time mutable следующим образом:

class CMeasurementValue {
private:
    double m_value;
    mutable unsigned int m_time;
    // ...
};

Из документов:

  • изменяемый - разрешает изменение члена класса, объявленного непостоянным, даже если содержащий объект объявлен как const.

Однако, если предполагается, что функция calculateTime, помеченная как const, должна измениться состояние одного из членов, почему тогда оно помечается как const?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...