Итак, у меня есть простой класс:Перегрузка операторов за пределами класса
class complex{
private:
double a,b;
public:
void setA(double a){ this->a=a; }
void setB(double b){ this->b=b; }
double getA(){ return a; }
double getB(){ return b; }
friend complex operator+(const complex&, const complex&);
};
И у меня есть фактический перегруженный оператор здесь:
complex operator+(const complex& x, const complex& y){
complex c;
c.a=x.a+y.a;
c.b=x.b+y.b;
return c;
}
Я должен был оператор перегружен за пределами функции , Чтобы иметь доступ к частным переменным (они также должны быть частными), я подружился с классом с помощью функции. Я не знаю, правильно ли это делается, но, по крайней мере, это работает. Я хочу, чтобы иметь возможность добавлять целое число для обоих членов. В основном():
complex a;
a.setA(2);
a.setB(3);
a+5;
Приведёт к тому, что a.a = 7 и a.b = 8. Такая перегрузка внутри класса довольно легко сделать (Опять же, не знаю, если это хорошее решение, если нет, пожалуйста, поправьте меня):
complex operator+(int x){
this->a+=x;
this->b+=x;
}
Но я понятия не имею, как сделать это за пределами класса, потому что Я не могу использовать этот «указатель».
Операторы, которые реализованы внутри класса, должны опустить параметр левого операнда и вместо этого использовать 'this'. Операторы, которые реализованы вне класса, должны иметь левый параметр операнда и не могут использовать 'this'. Однако ваш член класса 'operator +()' реализован неправильно, вы не должны изменять значения 'this', оператор возвращает новый объект, поэтому измените его. –