The initial reason wass for chaining mathematical operations, like this:
class mynumberclass {
int internal;
public:
mynumberclass(int);
mynumberclass operator+(const mynumberclass&) const;
mynumberclass operator-(const mynumberclass&) const;
mynumberclass operator*(const mynumberclass&) const;
mynumberclass operator/(const mynumberclass&) const;
mynumberclass operator%(const mynumberclass&) const;
mynumberclass& operator+=(const mynumberclass&);
mynumberclass& operator-=(const mynumberclass&);
mynumberclass& operator*=(const mynumberclass&);
mynumberclass& operator/=(const mynumberclass&);
mynumberclass& operator%=(const mynumberclass&);
};
int main() {
mynumberclass a(3);
mynumberclass b(4);
mynumberclass c = (a * b + b) / 2; //this chains 3 of the above operators
}
without chaining, that code would have to look like this:
int main() {
mynumberclass a(3);
mynumberclass b(4);
mynumberclass c(a);
c *= b;
c += b;
c /= 2;
}
FredLarson also mentions the Named Parameter Idiom, which is certainly an awesome thing you can use chaining for.