Вход/Регистрация
Справочное руководство по C++
вернуться

Страустрап Бьярн

Шрифт:

R.13.4.1 Унарные операции

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

R.13.4.2 Бинарные операции

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

R.13.4.3 Присваивания

Функция присваивания operator= должна быть нестатической функцией-членом. Она не наследуется (§R.12.8). Более того, если пользователь не определил для класса X функцию operator=, то используется стандартная функция operator=, которая определяется как присваивание по членам для класса X.

X& X::operator=(const X& from)

{

 // копирование по членам X

}

R.13.4.4 Вызов функции

Вызов функции есть конструкция вида:

первичное-выражение ( список-выражений opt )

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

R.13.4.5 Индексация

Индексация, определяемая как:

первичное-выражение [ выражение ]

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

R.13.4.6 Доступ к члену класса

Доступ к члену класса определяется с помощью операции -›:

первичное-выражение -› первичное-выражение

Он считается унарной операцией. Для объекта класса x выражение x-›m интерпретируется как (x.operator-›)-›m. Отсюда следует, что функция operator-› должна возвращать или указатель на класс, или ссылку на класс, или объект класса, для которого определена функция operator-›. Она должна быть нестатической функцией-членом класса.

R.13.4.7 Инкремент и декремент

Функция с именем operator++ и с одним параметром задает для объектов некоторого класса операцию префиксного инкремента ++. Функция с именем operator++ и с двумя параметрами задает для объектов некоторого класса операцию постфиксного инкремента ++. Для постфиксной операции ++ второй параметр должен быть типа int, и, когда в выражении встречается операция постфиксного инкремента, функция operator++ вызывается со вторым параметром, равным нулю. Приведем пример:

class X {

public:

 X operator++; // префиксная ++a

 X operator++(int) // постфиксная a++

};

void f(X a)

{

 ++a; // a.operator++;

 a++; // a.operator++(0);

 a.operator++; // явный вызов: действует как ++a;

 a.operator++(0); // явный вызов: действует как a++;

}

Префиксные и постфиксные операции декремента - определяются аналогичным образом.

R.14 ШАБЛОНЫ ТИПА

R.14.1 Шаблоны типа

Шаблон типа определяет целое семейство типов или функций.

описание-шаблона-типа:

 template ‹ список-параметров-шаблона-типа › описание

список-параметров-шаблона-типа:

 параметр-шаблона-типа

  • Читать дальше
  • 1
  • ...
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: