Объектно-ориентированное программирование. Богомолов А - 20 стр.

UptoLike

20
a+=1) может не сохраняться для таких же операций над классами. Для некоторых опе-
раций требуется, чтобы в случае использования основных типов операнд был адресом
(например, для +=). Это требование может быть снято, если операция задана над клас-
сами. Перегруженная операция не может иметь стандартные значения параметров.
Унарные операции
Префиксную унарную операцию можно задать с помощью нестатической функции-
члена, без параметров или с помощью функции, не являющейся членом, с одним пара-
метром. Таким образом, для всякой префиксной унарной операции @, выражение @x
может интерпретироваться как x.operator@() или как operator@(x). Если описаны функ-
ции-операторы обоих видов, то какая из них будет использоваться при вызове
, опреде-
ляется правилами сопоставления параметров. Постфиксные унарные операции, такие
как ++ и -- , объясняются в соответствующем разделе.
Бинарные операции
Бинарную операцию можно задать с помощью нестатической функции-члена,
имеющей один параметр, или с помощью функции, не являющейся членом, с двумя па-
раметрами. Таким образом, для всякой бинарной операции @ выражение x@y может
интерпретироваться как x.operator@(y) или как operator@(x,y). Если описаны функции-
операторы обоих видов, то какая из них будет использоваться при вызове, определяется
правилами
сопоставления параметров.
Присваивания
Функция присваивания operator=() должна быть нестатической функцией-
членом. Она не наследуется. Более того, если пользователь не определил для класса X
функцию operator=, то используется стандартная функция operator=, которая определя-
ется как присваивание по членам для класса X.
X& X::operator=(const X& from)
{
// копирование по членам X
}
Вызов функции
Вызов функции есть конструкция вида:
первичное-выражение ( список-выражений opt )
Она считается бинарной операцией, в которой первичное-выражение представ-
ляет первый операнд, а список-выражений (возможно пустой), - второй операнд. Име-
нем, задающим функцию, служит operator(), и вызов x(arg1,arg2,arg3) для объекта клас-
са x интерпретируется как x.operator()(arg1,arg2,arg3). Функция operator() должна быть
нестатической функцией-членом класса x.
Индексация
Индексация, определяемая как:
первичное-выражение [ выражение ]
считается бинарной операцией. Выражение с индексацией x[y] для объекта класса x ин-
терпретируется как x.operator[](y). Функция operator[] должна быть нестатической
функцией-членом класса x.
                                         20

a+=1) может не сохраняться для таких же операций над классами. Для некоторых опе-
раций требуется, чтобы в случае использования основных типов операнд был адресом
(например, для +=). Это требование может быть снято, если операция задана над клас-
сами. Перегруженная операция не может иметь стандартные значения параметров.

Унарные операции
Префиксную унарную операцию можно задать с помощью нестатической функции-
члена, без параметров или с помощью функции, не являющейся членом, с одним пара-
метром. Таким образом, для всякой префиксной унарной операции @, выражение @x
может интерпретироваться как x.operator@() или как operator@(x). Если описаны функ-
ции-операторы обоих видов, то какая из них будет использоваться при вызове, опреде-
ляется правилами сопоставления параметров. Постфиксные унарные операции, такие
как ++ и -- , объясняются в соответствующем разделе.

Бинарные операции
       Бинарную операцию можно задать с помощью нестатической функции-члена,
имеющей один параметр, или с помощью функции, не являющейся членом, с двумя па-
раметрами. Таким образом, для всякой бинарной операции @ выражение x@y может
интерпретироваться как x.operator@(y) или как operator@(x,y). Если описаны функции-
операторы обоих видов, то какая из них будет использоваться при вызове, определяется
правилами сопоставления параметров.

Присваивания
        Функция присваивания operator=() должна быть нестатической функцией-
членом. Она не наследуется. Более того, если пользователь не определил для класса X
функцию operator=, то используется стандартная функция operator=, которая определя-
ется как присваивание по членам для класса X.
        X& X::operator=(const X& from)
        {
        // копирование по членам X
        }

Вызов функции
        Вызов функции есть конструкция вида:
        первичное-выражение ( список-выражений opt )
        Она считается бинарной операцией, в которой первичное-выражение представ-
ляет первый операнд, а список-выражений (возможно пустой), - второй операнд. Име-
нем, задающим функцию, служит operator(), и вызов x(arg1,arg2,arg3) для объекта клас-
са x интерпретируется как x.operator()(arg1,arg2,arg3). Функция operator() должна быть
нестатической функцией-членом класса x.

Индексация
Индексация, определяемая как:
      первичное-выражение [ выражение ]
считается бинарной операцией. Выражение с индексацией x[y] для объекта класса x ин-
терпретируется как x.operator[](y). Функция operator[] должна быть нестатической
функцией-членом класса x.