I am writing my own array class as an exercise. Since, I read non-member functions are actually better in some ways than member functions. (Scott Meyers)
I am trying to write as many operator overloads as non-member functions as possible. The operator overloads + , - all work out fine as non-member functions.
my_array operator+(const my_array & left, const my_array & right);
my_array operator-(const my_array & operand);
my_array & operator++(); // prefix
my_array operator++(int); //postfix, compiler puts a 0
However, the prefix/postfix operators as non-member functions give issues (they work fine if I use scope resolution and make them member functions)
I understand that not every operator overload can be member functions. But , I am having trouble as to why these two cannot be non-member functions. The error I get is:
: 'my_array& operator++()' must have an argument of class or enumerated type
Which basically can be solved if I make them member functions and allow a *this array obj to be passed along in the following format.
(*this).operator++();
But the whole thing is, I do not want to make them member functions in first place! So, is it that the pre/post fix operators cannot/should not be implemented as non-member function?
The reasoning I came up with is that, since postfix/prefix is unary operator they only have one argument (usually a *this). So, if I want the compiler to provide the *this pointer implicitly and call the overloads, they must be implemented as a member-function.
Is My reasoning correct? If not how do I implement this as a non-member function? Thanks for providing me with some insight.