ВУЗ:
Составители:
Рубрика:
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.
Страницы
- « первая
- ‹ предыдущая
- …
- 18
- 19
- 20
- 21
- 22
- …
- следующая ›
- последняя »