R.13.4 Перегруженные операции
R.13.4 Перегруженные операции
Перегружать можно большинство операций.
имя-функции-оператор:
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.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
16.1. Операции tty
16.1. Операции tty Устройства tty предоставляют огромное количество опций обработки данных; они относятся к наиболее сложным устройствам ядра. Настраивать можно опции обработки входных и выходных данных, а также потока данных. Также можно контролировать ограниченное
Код операции MI
Код операции MI В таблице 4.14 показано назначение битов кода операции MI. Бит 3 задает вычислительный или невычислительный формат команды. Во втором случае функция, которая должна быть выполнена, закодирована в битах 5-15 кода операции. Функция, выполняемая вычислительной
Операции
Операции Операция представляет собой любой шаг или функцию, чье мысленное или физическое выполнение имеет поставленную цель. Операции включают в себя всю работу руководителей и технического персонала по выполнению задач проекта и
R.13.4 Перегруженные операции
R.13.4 Перегруженные операции Перегружать можно большинство операций.имя-функции-оператор: operator операцияоперация: один из new delete + - * / % ^ & | ~ ! = ‹ › += -= *= /= %= ^= &= |= ‹‹ ›› ››= ‹‹= == != ‹= ›= && || ++ -- , -›* -› () []Две последние операции - это вызов функции (§R.5.2.2) и
Операции += и -=
Операции += и -= Если вы изучаете C#, уже имея опыт использования C++, то можете обратить внимание на отсутствие возможности перегрузки операторных сокращений, включающих операцию присваивания (+=, -= и т.д.). Не волнуйтесь, в C# операторные сокращения с присваиванием
Операции
Операции В языке Си предусматриваются поразрядные логические операции и операции сдвига. Далее мы будем записывать значения в двоичном коде, чтобы вы могли видеть, как выполняются операции. В реальных программах используются целые переменные или константы, записанные в
Операции
Операции Теперь рассмотрим, что можно и нельзя делать с величинами типа enum. Вы можете присвоить константу типа enum переменной того же типа enum feline pet;pet = tiger;Нельзя использовать другие операции присваивания: pet += cat; /* недопустимо */Можно провести сравнение с целью выявления
Операции
Операции Операции в языке Си имеют либо один операнд (унарные операции), либо два операнда (бинарные операции), либо три (тернарная операция). Операция присваивания может быть как унарной, так и бинарной (см. раздел 4.4).Существенным свойством любой операции является ее
4.3. Операции сравнения и логические операции
4.3. Операции сравнения и логические операции Символ операции Значение Использование ! Логическое НЕ !expr меньше exprexpr = Меньше либо равно expr=expr больше exprexpr = больше либо равно expr=expr == равно expr==expr != не равно expr!=expr логическое
9. Перегруженные функции
9. Перегруженные функции Итак, мы уже знаем, как объявлять, определять и использовать функции в программах. В этой главе речь пойдет об их специальном виде – перегруженных функциях. Две функции называются перегруженными, если они имеют одинаковое имя, объявлены в одной
9.1.5. Директива extern "C" и перегруженные функции A
9.1.5. Директива extern "C" и перегруженные функции A В разделе 7.7 мы видели, что директиву связывания extern "C" можно использовать в программе на C++ для того, чтобы указать, что некоторый объект находится в части, написанной на языке C. Как эта директива влияет на объявления
9.1.6. Указатели на перегруженные функции A
9.1.6. Указатели на перегруженные функции A Можно объявить указатель на одну из множества перегруженных функций. Например:extern void ff( vectordouble );extern void ff( unsigned int );// на какую функцию указывает pf1?void ( *pf1 )( unsigned int ) = ff;Поскольку функция ff() перегружена, одного инициализатора ff
15. Перегруженные операторы и определенные пользователем преобразования
15. Перегруженные операторы и определенные пользователем преобразования В главе 15 мы рассмотрим два вида специальных функций: перегруженные операторы и определенные пользователем преобразования. Они дают возможность употреблять объекты классов в выражениях так же
8.9 Перегруженные Имена Функций
8.9 Перегруженные Имена Функций В тех случаях, когда для одного имени определено неколько (различных) описаний функций, это имя называется прегруженным. При использовании этого имени правильная функция выбирается с помощью сравнения типов фактических параметров с типами
Операции is и as
Операции is и as Операция is предназначена для проверки того, имеет ли классовая переменная указанный динамический тип. Операция as позволяет безопасно преобразовать переменную одного классового типа к другому классовому типу (в отличие от явного приведения классового