#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
класса, что противоположно тому, что вы пытаетесь сделать.