Справочное руководство по C++
Шрифт:
R.13.4.3 Присваивания
Функция присваивания operator= должна быть нестатической функцией-членом. Она не наследуется (§R.12.8). Более того, если пользователь не определил для класса X функцию operator=, то используется стандартная функция operator=, которая определяется как присваивание по членам для класса X.
R.13.4.4 Вызов функции
Вызов
Она считается бинарной операцией, в которой первичное-выражение представляет первый операнд, а список-выражений (возможно пустой), - второй операнд. Именем, задающим функцию, служит 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++ вызывается со вторым параметром, равным нулю. Приведем пример:
Префиксные и постфиксные операции декремента - определяются аналогичным образом.
R.14 ШАБЛОНЫ ТИПА
R.14.1 Шаблоны типа
Шаблон типа определяет целое семейство типов или функций.
Конструкция описание в описании-шаблона-типа должна содержать описание или определение функции или класса.
В конструкции параметр-типа идентификатор определяется как имя-типа в области видимости описания шаблона типа.
Имена шаблонов типа подчиняются обычным правилам для областей видимости и контроля доступа. Конструкция описание-шаблона-типа считается описанием. Она может присутствовать в программе только как глобальное описание.
R.14.2 Шаблоны типов для классов
Шаблон типа для класса определяет как будут строиться классы, подобно тому, как описание класса определяет как будут строиться объекты этого класса. Шаблон типа для класса vector можно описать следующим образом:
Префикс template‹class T› показывает, что описывается шаблон типа, и что в этом описании используется имя-типа T, иными словами, vector - это параметризованный тип с параметром T.
Класс можно задать с помощью конструкции имя-шаблонного-класса:
Конструкция имя-шаблонного-класса является именем-класса (§R.9).
Класс, который порождается шаблоном типа для класса, называется шаблонным классом и эквивалентен обычному классу, определенному со специальным именем - именем-шаблонного-класса, см. §R.14.5.
Если в конструкции имя-шаблонного-класса имя-шаблона-типа не определено,то она обозначает неопределенный класс.
Имя шаблонного класса должно быть уникальным в программе и в своей области видимости оно не может обозначать другой шаблон типа, класс, функцию, объект, значение или тип.
Типы, указанные в списке-парам-шаблона-типа из имени-шаблонного-класса, должны соответствовать типам, заданным в списке-параметров-шаблона-типа из шаблона-типа. (Можно сказать, что первые являются фактическими параметрами шаблона типа, а вторые - формальными.)