Et eksempel:
#include <iostream>
class Point
{
public:
Point(int aX = 0, int aY = 0) : X(aX), Y(aY)
{}
int X, Y;
};
std::ostream& operator << (std::ostream& os, const Point& aP)
{
os << aP.X << " " << aP.Y;
return os;
}
const Point operator + (const Point& aA, const Point& aB)
{
Point P(aA.X + aB.X, aA.Y + aB.Y);
return P;
}
int main()
{
Point A(1, 2);
std::cout << A << std::endl;
Point B(2, 3);
Point C = A + B;
std::cout << C << std::endl;
}
Her oprettes en class (Point), for at kunne udskrive den til cout som med f.ex. en int, laves en "std::ostream& operator <<" som er en overloadet operator.
Der er også en "const Point operator + " som gør at man kan lægge to punkter sammen.
Hvad: Det er en metode der gør det muligt at anvende almindelige operatorer på objekter.
Hvorfor: Fordi det i en række tilfælde er smart at skrive koden med operatorer i stedet for funktioner. Jeg kan bedre lide:
Point C = A + B;
End
Point C = Add(A, B);
Hvornår: Når det er det smarteste at gøre og operatoren giver mening. Man kunne godt have et vindue:
Window MyWindow;
Og så bruge ++ operatoren på Window til at opdatere det, og -- til at lukke det, men det er ikke den forventede opførsel for ++ og -- så lad være.
Jeg kan i øvrigt bedre lide operatoroverloading end operatoroverstyring, operatoren blive erstatter default (hvis der er en), der er ingen overstyring.