Przedstawię Ci przykład dla liczb zespolonych, w jaki sposób przeciążyć operator+ poza klasą ; )
#include<iostream>
using namespace std;
class Zespolona {
private:
double real;
double imag;
public:
Zespolona(double re, double im) : real(re), imag(im) {}
double getReal() const {
return real;
}
double getImag() const {
return imag;
}
};
Zespolona operator+(const Zespolona& a, const Zespolona& b) {
double re = a.getReal() + b.getReal();
double im = a.getImag() + b.getImag();
return Zespolona(re, im);
}
int main() {
Zespolona x = Zespolona(2.5, 1.2);
Zespolona y = Zespolona(3.5, 3.4);
Zespolona z = x + y;
cout << z.getReal() << " " << z.getImag();
return 0;
}
Czym się różni od tego zdefiniowanego w klasie? Wyłącznie ilością argumentów i ewentualnie sposobem dostawania się do pól składowych (nie możemy użyć this). Gdybym nie oznaczył tych ostatnich jako prywatne to nie potrzebowałbym getter'ów, jednak nierozsądnie byłoby określić je jako publiczne, po to mamy enkapsulację/hermetyzację w C++ : )