Как мне присвоить определенное значение из объекта длинной переменной?

#c #operator-overloading #operator-keyword

#c #оператор-перегрузка #operator-ключевое слово

Вопрос:

Пример:

 long a;
BoundedCounter e;
  

Итак, я хочу присвоить значение частной переменной counter в классе a.

 a=e;
  

Пробовал использовать это:

 long int amp; operator=(long b)
{
    b=counter;
    return b;
}
  

и

 long int amp; operator=(long b, BoundedCounter amp;a)
{
   b=a.getCounter();
   return b;
}
  

Которые возвращают ошибку компиляции:

не удается преобразовать BoundedCounter' to
long int’ в присваивание

и

`long intamp; operator=(long int, BoundedCounteramp;)’ должно быть нестатической функцией-членом

Как мне определить operator= вне класса, который будет работать, когда левая сторона является обычной переменной, а не объектом?

Ответ №1:

operator= здесь не подходит, поскольку левая часть присваивания является примитивным типом (и вы не можете определить operator= для примитивных типов). Попробуйте указать BoundedCounter operator long , например:

 class BoundedCounter
{
public:
    // ...
    operator long() const
    {
        return counter;
        // or return getCounter();
    }
};
  

Ответ №2:

Ваш код преобразуется из BoundedCounter в long BoundedCounter , поэтому вам нужно определить оператор преобразования (cast) из long в,,:

 class BoundedCounter {
private:
    long a_long_number;
public:
    operator long() const {
        return a_long_number;
    }
};
  

Оператор присваивания, который вы определили, позволил бы вам присвоить long значение экземпляру BoundedCounter класса, что противоположно тому, что вы пытаетесь сделать.