Глава 16. Перегрузка операций_______________________________395
void DATE::IncrementDate ( unsigned int days);
ИЛИ
DATES DATE::IncrementDate ( unsigned int days);
Синтаксис использования этой функции выглядит так:
DATE d;
d.IncrementDate (5);
Эта функция будет работать, не требуя специального синтаксиса операций. 'Позже, приобретя опыт работы с оператор-функциями, эту же функцию можно реализовать через операцию +=:
DATE& DATE::operator+= ( unsigned int days);
и использовать так:
DATE d;
d += 5;
*
что синтаксически несколько проще, хотя и то, и другое правильно. При этом вам не придется переписывать код, использующий функцию IncrementDate. Все, что вам потребуется — это переопределить ее саму как оператор-функцию operator+=
DATES DATE::IncrementDate ( unsigned int days) ( return operator+=(days); }
Изменение кода в функции-члене класса, в отличие от изменения в аргументах, не требует никаких модификаций программ, использующих этот класс (класс DATE в нашем случае).
Одноместные операции
Одноместные (унарные) операции манипулируют с одним объектом. Поэтому перегрузка унарных операций подразумевает, что и здесь работа будет вестись с одним объектом. Если унарная операция является членом класса, то объект будет доступен по ссылке на себя (через указатель this); если она глобальная или дружественная, то объект будет передаваться в списке аргументов.
Синтаксическое использование перегруженной операции не изменяется, но изменяется представление в логически эквивалентном развернутом виде. Пусть объект х передан произвольной одноместной операции а (альфа, любая допустимая унарная операция). Если оператор-функция является членом класса, то эквивалентный вызов можно представить как:
-х.operator а ();