Глава 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 а ();