C++   ::   Хилл Мюррей

Страница: 201 из 357

Таким образом, для любой унарной операции @ 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); // ошибка: тернарное

*);

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



6.2.2 Предопределенный Смысл Операций

Относительно смысла операций, определяемых пользоватлем, не делается никаких предположений. В частности, посколку не предполагается, что перегруженное = реализует присваивание ее первому операнду, не делается никакой провеки, чтобы удостовериться, является ли этот операнд lvalue (#с.6).

Значения некоторых встроенных операций определены как равносильные определенным комбинациям других операций над тми же аргументами. Например, если a является int, то ++a оначает a+=1, что в свою очередь означает a=a+1. Такие соотншения для определяемых пользователем операций не выполняются, если только не случилось так, что пользователь сам определил их таким образом. Например, определение operator+= () для тпа complex не может быть выведено из определений complex::operator+() и complex::operator=().

|< Пред. 199 200 201 202 203 След. >|

Java книги

Контакты: [email protected]