Я пишу свой собственный класс массива в качестве упражнения. Поскольку я читал, что функции, не являющиеся членами, на самом деле в некоторых отношениях лучше, чем функции-члены. (Скотт Мейерс)
Я пытаюсь написать как можно больше перегрузок операторов как функций, не являющихся членами. Оператор перегружает + , - все отлично работает как функции, не являющиеся членами.
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
Однако операторы префикса/постфикса как функции, не являющиеся членами, вызывают проблемы (они отлично работают, если я использую разрешение области и делаю их функциями-членами)
Я понимаю, что не каждая перегрузка оператора может быть функцией-членом. Но у меня возникают проблемы с тем, почему эти две функции не могут быть функциями, не являющимися членами. Ошибка, которую я получаю:
: 'my_array& operator++()' must have an argument of class or enumerated type
Что в основном может быть решено, если я сделаю их функциями-членами и позволю передать * этот массив obj в следующем формате.
(*this).operator++();
Но все дело в том, что я не хочу делать их функциями-членами в первую очередь! Итак, операторы pre/post fix не могут/не должны быть реализованы как функция, не являющаяся членом?
Я пришел к выводу, что, поскольку постфикс/префикс является унарным оператором, у них есть только один аргумент (обычно это *this). Итак, если я хочу, чтобы компилятор неявно предоставлял указатель *this и вызывал перегрузки, они должны быть реализованы как функция-член.
Мои рассуждения верны? Если нет, как мне реализовать это как функцию, не являющуюся членом? Спасибо, что предоставили мне некоторое представление.