· Любая бинарная операция Å может быть определена двумя способами: либо как компонентная функция с одним параметром, либо как глобальная (возможно дружественная) функция с двумя параметрами. В первом случае xÅy означает вызов x.operatorÅ(y), во втором – вызов operatorÅ(x,y).
· Операции, перегружаемые внутри класса, могут перегружаться только нестатическими компонентными функциями с параметрами. Вызываемый объект класса автоматически воспринимается в качестве первого операнда.
· Операции, перегружаемые вне области класса, должны иметь два операнда, один из которых должен иметь тип класса.
Примеры.
1)class person{…};
class adresbook
{ // содержит в качестве компонентных данных множество объектов типа //person, представляемых как динамический массив, список или дерево
…
public:
person& operator[](int); //доступ к i-ому объекту
};
person& operator[](int i){. . .}
void main()
{class adresbook persons;
class person record;
…
record = persons[3];
}
2)class person{…};
class adresbook
{ // содержит в качестве компонентных данных множество объектов типа //person, представляемых как динамический массив, список или дерево
…
public:
friend person& operator[](const adresbook&,int); //доступ к i-ому объекту
};
person& operator[](const adresbook& ob ,int i){. . .}
void main()
{class adresbook persons;
class person record;
…
record = persons[3];
}
15.4 Перегрузка операций ++ и --.
Унарные операции инкремента ++ и декремента – существуют в двух формах: префиксной и постфиксной. В современной спецификации С++ определен способ, по которому компилятор может различить эти две формы. В соответствии с этим способом задаются две версии функции operator++() и operator—(). Они определены следующим образом:
Префиксная форма:
operator++();
operator—();
Постфиксная форма:
operator++(int);
operator—(int);
Указание параметра int для постфиксной формы не специфицирует второй операнд, а используется только для отличия от префиксной формы.
Пример
class person
{ int age;
. . .
public:
. . .
void operator++(){ ++age;}
void operator++(int){ age++;}
};
void main()
{class person jon;
++jon;
jon++}