Унарный и бинарный оператор

Унарный и бинарный оператор

БлогNot. C++: переопределяем префиксный, постфиксный, унарный и бинарный операторы

C++: переопределяем префиксный, постфиксный, унарный и бинарный операторы

Забавно, 2 дня подряд всплывала эта тема — разница в переопределениях унарного и бинарного оператора в С++, пожалуй, сделаю пример для простейшего класса комплексных чисел. Оператор бинарного "+" будет переопределён так, что мы сможем складывать комплексные числа в естественном виде c=a+b , а унарный "+" перед числом пусть меняет знак его мнимой части.

Насчёт переопределения префиксных и постфиксных операций в C++, кстати, тоже есть заморочки, так что добавим реализацию и префиксного, и постфиксного "++" для увеличения на 1 величины действительной части:

Если сказать совсем грубо, бинарный "+" порождает новый объект класса C — число, являющееся результатом сложения. При выполнении сложения вида c=a+b; для функции оператора должны быть доступны 2 объекта — объект a через предопределённый указатель this , объект b через параметр ( C &c2 в листинге), а в качестве c возвращается созданный функцией объект sum .

С унарным оператором всё проще — достаточно изменить нужное свойство текущего объекта, а новый не порождается.

Обратите также внимание, что префиксный оператор ++ просто изменит состояние объекта, а постфиксный должен создать временный объект (копию исходного) и вернуть его, при этом всё равно увеличив состояние нужного свойства исходного объекта.

Вывод этой программы:

16.06.2013, 21:56; рейтинг: 10788

Лекция №2

Операции и Выражения

Операнд — это константа, литерал, идентификатор, вызов функции, индексное выражение, выражение выбора элемента или более сложное выражение, сформированное комбинацией операндов, знаков операций и круглых скобок. Любой операнд, который имеет константное значение, называется константным выражением. Каждый операнд имеет тип.

Знаки операций определяют действия, которые должны быть выполнены над операндами.

Комбинация знаков операций и операндов, результатом которой является определенное значение, называется выражением. Каждый операнд в выражении может быть выражением. Значение выражения зависит от расположения знаков операций и круглых скобок в выражении, а также от приоритета выполнения операций.

Читайте также:  Прошивка модема мтс е171 под всех операторов

Lvalues и Rvalues выражения

Lvalues –выражение (или именующее выражение) представляет собой локатор объекта, выражение, которое обозначает объект.

Модифицируемое именующее выражение – это идентифицирующее выражение, относящееся к объекту, к которому возможен доступ и допустимо его изменение в памяти. Так значения констант, описанные в модификаторе const, не являются модифицируемыми именующими выражениями. Исторически в слове Lvalues буква L означает «левый» (Left). Это означает, что Lvalue допускается в левой части оператора присваивания. Здесь в левой части оператора присваивания допустимы только модифицируемые именующие выражения. Например, если а и с – это не являющиеся константами целочисленные идентификаторы с правильно распределенными для них областями памяти, то оба они являются модифицируемыми именующими выражениями, и присваивания типа а=1; с=а+с; вполне допустимы.

Rvalues –выражения называют значением переменной (значением правой части выражения). Исторически в слове Rvalues буква R означает «правый» (Right).Так, например, выражение с+а не является именущим (присваивание типа с+а=с недопустимо), но является Rvalue –выражением.

Унарные, бинарные и тернарное выражения

Унарное выражение состоит из операнда и предшествующего ему знаку унарной операции и имеет следующий формат:

Бинарное выражения состоит из двух операндов, разделенных знаком бинарной операции:

Выражение1 ЗнакБинарнойОперации Выражение2 .

Тернарное выражение состоит из трех операндов, разделенных знаками тернарной операции (?) и (:), и имеет формат:

Выражение1 ? операнд2 : операнд3 .

По количеству операндов, участвующих в операции, операции подразделяются на унарные, бинарные и тернарные.

Унарные операции выполняются справа налево.

Операции увеличения и уменьшения увеличивают или уменьшают значение операнда на единицу и могут быть записаны как справа так и слева от операнда. Если знак операции записан перед операндом (префиксная форма), то изменение операнда происходит до его использования в выражении. Если знак операции записан после операнда (постфиксная форма), то операнд вначале используется в выражении, а затем происходит его изменение.

Таблица 7 Унарные операции

Знак операции Операция Группа операций
+ Унарный плюс Аддитивные
Отрицание
++ Увеличение
Уменьшение
Читайте также:  Как переписать файлы на диск

Поразрядное отрицание(дополнение) Поразрядные операции ! Логическое отрицание Логические операции * Разадресация (косвенная адресация) Адресные операции & Вычисление адреса Sizeof Размер Size-операция

В отличие от унарных, бинарные операции, список которых приведен в табл.8, выполняются слева направо.

Таблица 8 Бинарные операции

Знак операции Операция Группа операций
* Умножение Мультипликативные
/ Деление
% Остаток от деления
+ Сложение Аддитивные
Вычитание
> Сдвиг вправо
= Больше или равно
== Равно
!= Не равно
& Поразрядное И Поразрядные операции
| Поразрядное ИЛИ
^ Поразрядное исключающее ИЛИ
&& Логическое И Логические операции
|| Логическое ИЛИ
, Последовательное вычисление Последовательного вычисления
= Присваивание Операции присваивания
*= Умножение с присваиванием
/= Деление с присваиванием
%= Остаток от деления с присваиванием
-= Вычитание с присваиванием
+= Сложение с присваиванием
>= Сдвиг вправо присваиванием
&= Поразрядное И с присваиванием
|= Поразрядное ИЛИ с присваиванием
^= Поразрядное исключающее ИЛИ с присваиванием

При вычислении выражений тип каждого операнда может быть преобразован к другому типу. Преобразования типов могут быть неявными, при выполнении операций и вызовов функций, или явными, при выполнении операций приведения типов.

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Как то на паре, один преподаватель сказал, когда лекция заканчивалась — это был конец пары: "Что-то тут концом пахнет". 8867 — | 8386 — или читать все.

унарные-бинарные операторы

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

До сих пор операторы встречались нам поодиночке. Инструкция с=а+Ь вполне однозначна: в ней сумма двух переменных, а и Ь, отправляется в переменную с. Но как гюнять фрагмент программы, показанной в лнсти1[ге 3.1?

Читайте также:  Как сменить volume id

#inclucle using namespace std: int main()< int a=l.b=2.c=3:

Инструкция a+b*c содержит два оператора, и не ясно, какой из них выполнится первым. Если это будет сложение, то на экране появится цифра 9, так как (1 +2) х 3 = = 9. Если же сначала умножить b пас и к произведению добавить а, то результат окажется равным 7, так как 1 + (2 X 3) = 7.

Проверка показывает, что справедлива вторая гипотеза: сначала выполняется умножение, а потом сложение. Ины.ми словами, приоритет оператора умножения выше, чем оператора сложения.

Приоритет есть, конечно, у любого оператора С++. У арифметических операторов (+, -, *, /) он выше, чем у оператора вывода . Вот почему компилятор сначала вычисляет а+Ь*с и лишь [ютом выводит результат на экран.

Кроме приоритета у любого оператора есть еще порядок выполнения. Так, например, оператор вывода выполняется слева направо, поэтому в следующей ин-

струкции сначала ш экран выводится результат операций а+Ь*с и только заттг&и переводится строка: cout a+b*c endl:

Подробнее о приоритетах и порядке выполнения операторов С++ можно узнать в приложении.

Но как изменить этот порядок? Здесь помогут обычные круглые скобки. Чтобы в листинге 3.1 сумма а и b умножалась на с, достаточно aainicarb инструкцию вывода на эк1)ан так: cout (a+b)*c endl:

Арифметические операторы, о которых мы говорили в предыдугцсм разделе, весьма важны и [асто встречаются. Но важнее всего в программироваши, безусловно, условные операторы, потому что они позволяют изменить ход выполнения программы, в частности заставить какой-то ее фрагмент выполняться многократно. Не будь их, программа состояла бы из последовательно выполняемых инструкций, то есть буквально все вычисления пришлось бы описывать. По компьютеры способны выполнять миллиарды инструкций в секунду, И для описания одной десятой секунды жизни процессора пе хватило бы жизни человеческой.

Знакомство с условными операторами пач1[ем с программы, определяющей минимальное число из трех (листинг 3.2).

Ссылка на основную публикацию
Телефонный шлюз что это
VoIP-шлюз — это межсетевой шлюз, предназначенный для перевода трафика между сетями различных типов. VoIP-шлюзы можно разделить на многоканальные и одноканальные:...
Сравнить технические характеристики rx330 и rx350
Линейка популярных люксовых SUV Lexus RX пополнилась новой модификацией – RX 350. Теперь покупателем RX быть еще приятнее – ведь...
Сравнить процессоры кирин и снапдрагон
Snapdragon 636 vs. Kirin 960: кто лучше? Результаты тестов и сравнительных таблиц, описанных в этой статье, помогут определить, какой из...
Телефонная клавиатура на компьютере
Виртуальная клавиатура выручит Вас, когда выйдет из строя основное физическое устройство ввода, полностью или частично ( поломается несколько клавиш )....
Adblock detector