Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Создание программ на С++.doc
Скачиваний:
18
Добавлен:
29.09.2019
Размер:
1.59 Mб
Скачать

Старшинство операций

При выполнении арифметических операций в C++ необходимо знать, что C++ выполняет операции в определенном порядке, основанном на старшинстве операций. Например, операция умножения выполняется до сложения. Чтобы лучше понять старшинство операций, рассмотрите следующие выражения:

result =5+2*3;

В зависимости от порядка, в котором C++ выполняет умножение и сложение, результат будет разным:

result =5+2*3;  =7*3;  = 21;  result =5+2*3;  =5+6;  = 11;

Чтобы избежать путаницы, C++ присваивает каждой операции приоритет, который определяет порядок выполнения операций. Так как C++ выполняет операции в определенном порядке, то и ваши программы будут проводить арифметические вычисления соответствующим образом.

Таблица 5.3 перечисляет старшинство операций C++. Операции, находящиеся в верхней части, имеют более высокий приоритет. Операции внутри каждой части имеют одинаковый приоритет. Если вы рассмотрите таблицу, то увидите, что в C++ умножение имеет более высокий приоритет, чем сложение. Вы не знакомы со многими операциями, представленными в таблице. В настоящее время не думайте об этих операциях. К концу изучения этой книги вы сможете использовать (и понять) каждую из них!

Таблица 5.3. Старшинство операций в C++.

Операция

Имя

Пример

:: Разрешение области видимости classname::classmember_name

::

Глобальное разрешение

::variable_name

.

Выбор элемента

object.member_name

->

Выбор элемента

pointer->membername

[]

Индексация

pointer[element]

()

Вызов функции

expression(parameters)

()

Построение значения

type(parameters)

sizeof

Размер объекта

sizeof expression

sizeof

Размер типа

sizeof(type)

++

Приращение после

variable++

++

Приращение до

++variable

--

Уменьшение после

variable--

--

Уменьшение до

-- variable

&

Адрес объекта

&variable

*

Разыменование

*pointer

new

Создание (размещение)

new type

delete

Уничтожение (освобождение) delete pointer

delete[]

Уничтожение массива

delete pointer

~

Дополнение

~expression

!

Логическое НЕ

! expression

+

Унарный плюс

+1

-

Унарный минус

-1

()

Приведение

(type) expression

.*

Выбор элемента

object.*pointer

->

Выбор элемента

object->*pointer

*

Умножение

expression * expression

/

Деление

expression / expression

%

Взятие по модулю

expression % expression

+

Сложение (плюс)

expression + expression

-

Вычитание (минус)

expression expression

Управление порядком, в котором C++ выполняет операции

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

cost = price_a + price_b * 1.06;

К сожалению, в этом случае C++ сначала выполнит умножение (price_b * 1.06), а затем прибавит значение price_a.

Если ваши программы должны выполнять арифметические операции в определенном порядке, вы можете заключить выражение в круглые скобки. Когда C++ оценивает выражение, он сначала всегда выполняет операции, сгруппированные в круглых скобках. Например, рассмотрим следующее выражение:

result =(2+3)* (3+4);

C++ вычисляет данное выражение в следующем порядке:

result = (2 + 3) * (3 + 4);  = (5) * (3 + 4);  = 5 * (7);  =5*7;  = 35;

Подобным образом группируя выражения внутри круглых скобок, вы можете управлять порядком, в котором C++ выполняет арифметические операции. Аналогично предыдущему примеру, ваша программа может сложить две стоимости внутри круглых скобок, как показано ниже:

cost = (price_a + price_b) * 1.06;