6.2.1 Бинарные и Унарные Операции

6.2.1 Бинарные и Унарные Операции

Бинарная операция может быть определена или как функция член, получающая один параметр, или как функция друг, получющая два параметра. Таким образом, для любой бинарной оперции @ aa@bb может интерпретироваться или как aa.operator@(bb), или как operator@(aa,bb). Если определены обе, то aa@bb является ошибкой. Унарная операция, префиксная или постфиксная, может быть определена или как функция член, не получающая параметров, или как функция друг, получающая один параметр. Таким образом, для любой унарной операции @ aa @ или @aa может интерпретироваться или как aa.operator@(), или как operator@(aa). Если определено и то, и другое, то и aa@, и @aa являются ошибками. Рассмотрим следующие примеры:

class X (* // друзья

friend X operator-(X); // унарный минус friend X operator-(X,X); // бинарный минус friend X operator-(); // ошибка: нет операндов

friend X operator-(X,X,X); // ошибка: тернарная

// члены (с неявным первым параметром: this)

X* operator amp;(); // унарное amp; (взятие адреса) X operator amp;(X); // бинарное amp; (операция И) X operator amp;(X,X); // ошибка: тернарное

*);

Когда операции ++ и – перегружены, префиксное использвание и постфиксное различить невозможно.