Also habe ich eine einfache Klasse:Overloading Betreiber außerhalb der Klasse
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&);
};
Und ich habe den tatsächlichen überladenen Operator hier:
complex operator+(const complex& x, const complex& y){
complex c;
c.a=x.a+y.a;
c.b=x.b+y.b;
return c;
}
ich den Betreiber außerhalb der Funktion überlastet haben muß . Um Zugriff auf private Variablen zu haben (diese müssen auch privat sein), habe ich mich mit der Klasse angefreundet. Ich weiß nicht, ob das richtig ist, aber zumindest funktioniert es. Ich möchte eine Ganzzahl zu beiden Mitgliedern hinzufügen können. In main():
complex a;
a.setA(2);
a.setB(3);
a+5;
Würde dazu führen, dass a.a = 7 und a.b = 8. Eine solche Überlastung im Inneren ist die Klasse ganz einfach (auch hier weiß nicht, ob das ist gute Lösung, wenn nicht bitte korrigieren Sie mich) zu machen:
complex operator+(int x){
this->a+=x;
this->b+=x;
}
Aber ich habe keine Ahnung, wie es außerhalb der Klasse zu machen, weil Ich kann diesen "Zeiger" nicht verwenden.
Operatoren, die innerhalb der Klasse implementiert sind, müssen den Parameter für den linken Operanden weglassen und stattdessen 'this' verwenden. Operatoren, die außerhalb der Klasse implementiert sind, müssen den Parameter für den linken Operanden haben und können 'this' nicht verwenden. Ihr Klassenmember 'operator +()' wurde jedoch falsch implementiert, Sie sollten die Werte von 'this' nicht ändern, der Operator gibt ein neues Objekt zurück, also ändern Sie das stattdessen. –