Перегружать можно большинство операций. имя-функции-оператор: operator операция операция: один из new delete + - * / % ^ & | ~! = < > += -= *= /= %= ^= &= |= << >> >>= <<= ==!= <= >= && || ++ --, ->* -> () [] Две последние операции - это вызов функции ($$R.5.2.2) и индексация($$R.5.2.1). Можно перегружать следующие (как бинарные, так и унарные)операции: + - * & Нельзя перегружать следующие операции:..*::?: sizeof а также и специальные символы препроцессора # и ## ($$R.16). Обычно функции, задающие операции (функция-оператор) не вызываютсяявно, к ним обращаются для выполнения операций ($$R.13.4.1, $$R.13.4.2).Однако, к ним можно обращаться явно, например: complex z = a.operator+(b); // complex z = a+b void* p = operator new(sizeof(int)*n); Операции new и delete описаны в $$R.5.3.3 и $$R.5.3.4 и к нимне относятся перечисляемые ниже правила. Функция-оператор может быть функцией-членом или иметь по крайнеймере один параметр типа класс или ссылка на класс. Нельзя изменитьприоритет, порядок выполнения или число операндов операции, номожно изменить предопределенное назначение таких операций: =,унарная & и,(запятой), если они применяются к объекту типа класс.За исключением функции operator=(), функция-оператор наследуется.Правила для operator=() даны в $$R.12.8. Эквивалентность некоторых операций над основными типами(например, ++a эквивалентно a+=1) может не сохраняться для такихже операций над классами. Для некоторых операций требуется, чтобыв случае использования основных типов операнд был адресом (например,для +=). Это требование может быть снято, если операция задана надклассами. Перегруженная операция не может иметь стандартные значенияпараметров ($$R.8.2.6). Операции, которые явно не указаны в $$R.13.4.3-$$R.13.4.7,действуют как обычные унарные или бинарные операции, подчиняющиесяправилам, приведенным в $$R.13.4.1 или $$R.13.4.2.