struct Number
{
Number operator+(const Number &n) const { /* ... */ }
Number operator-() const { /* ... */ }
bool operator==(const Number &n) const { /* ... */ }
Number &operator+=(const Number &n) { /* ... */ }
Number &operator++() { /* ... */ } // postfixed
Number operator++(int) { /* ... */ } // prefixed
double &operator*() { /* ... */ } // prefixed
double &operator->() { /* ... */ } // prefixed
};
struct Stream
{
Stream &operator<<(const Number &n) { /* ... */ }
};
They can also be redefined with a function (possibly friend). For
example:
Number operator+(const Number &n0, const Number &n1) { /* ... */ }
Number operator-(const Number &n) { /* ... */ }
bool operator==(const Number &n0, const Number &n1) { /* ... */ }
Stream &operator<<(Stream &is, const Number &n) { /* ... */ }
Number &operator+=(Number &n0, const Number &n1) { /* ... */ }
Number &operator++(const Number &n) { /* ... */ } // postfixed
Number operator++(const Number &n, int) { /* ... */ } // prefixed
double &operator*(const Number &n) { /* ... */ } // prefixed
double &operator->(const Number &n) { /* ... */ } // prefixed