Программирование >>  Дополнительные возможности наследования 

1 ... 17 18 19 [ 20 ] 21 22 23 ... 265


Оператор инкремента (++) увеличивает значение переменной на 1, а оператор декремента (--) уменьшает его на 1. Так, если у вас есть переменная С и вы хотите прирастить ее на единицу, используйте следующее выражение:

С++: Увеличение значения С на единицу

Это же выражение можно бьшо бы записать следующим образом:

С = С + 1;

что, в свою очередь, равносильно выражению.

С += V,

Префикс U иостфикс

Как оператор инкремента, так и оператор декремента работает в двух вариантах: префиксном и постфиксном. Префиксный вариант записывается перед именем переменной (++туАде), а постфиксный - после него (туАде++).

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

Семантика префиксного оператора следующая: инкрементируем значение, а затем считываем его. Семантика постфиксного оператора иная: считываем значение, а затем декрементируем оригинал.

На первый взгляд это может выглядеть несколько запутанным, но примеры легко проясняют механизм действия этих операторов. Если х - целочисленная переменная, значение которой равно 5, и, зная это, вы записали

int а = ++х;

то тем самым велели компилятору инкрементировать переменную х (сделав ее равной 6), а затем присвоить это значение переменной а. Следовательно, значение переменной а теперь равно 6 и значение переменной х тоже равно 6. Если же, после этого вы записали

int b = Х++;

то тем самым велели компилятору присвоить переменной b текущее значение переменной х (6), а затем вернуться назад к переменной х и инкрементировать ее. В этом случае значение переменной b равно 6, но значение переменной х уже равно 7. В листинге 4.4 продемонстрировано использование обоих типов операторов инкремента и декремента.

Листинг 4.4. Примеры исподьзоваиия префиксных и ностфиксиык онервторои

1: Листинг 4.4. Демонстрирует использование

2: префиксных и постфиксных операторов

3: инкремента и декремента

4: #include <iostream.h>

5: int mainO

6: {

7: int myAge = 39; инициализируем две целочисленные переменные



8: int yourAge = 39;

9: cout I am: myAge years old.\ n ;

10: cout You are: yourAge years old\ n ;

11: myAge++; постфиксный инкремент

12: ++yourAge; префиксный инкремент

13: cout One year passes...\ n ;

14: cout I am: myAge years old,\ n ;

15: cout You are: yourAge years old\ n ;

16: cout Another year passes\ n ;

17: cout I am: myAge++ years old.\ n ;

18: cout You are: ++yourAge years old\ n ;

19: cout Lets print it again.\ n ;

20: cout I am: myAge years old.\ n ;

21; cout You are: yourAge years old\ n ;

22: return 0;

23: }

I am 39 years old You are 39 years old One year passes I am 40 years old You are 40 years old Another year passes I am 40 years old You are 41 years old Lets print it again I am 41 years old You are 41 years old

в строках 7 и 8 объявляются две целочисленные переменные и каждая из них инициализируется значением 39. Значения этих переменных выводятся в строках 9 и 10.

В строке 11 инкрементируется переменная myAge с помощью постфиксного оператора инкремента, а в строке 12 инкрементируется переменная yourAge с помощью префиксного оператора инкремента. Результаты этих операций выводятся в строках 14 и 15; как видите, они идентичны (обоим участникам нашего эксперимента по 40 лет).

В строке 17 инкрементируется переменная myAge (также с помощью постфиксного оператора инкремента), являясь при этом частью выражения вывода на экран. Поскольку здесь используется постфиксная форма оператора, то инкремент выполняется после операции вывода, поэтому снова было выведено значение 40. Затем (для сравнения с постфиксным рариантом) в строке 18 инкрементируется переменная yourAge с использованием префиксного оператора инкремента. Эта операция выполняется перед выводом на экран, поэтому отображаемое значение равно числу 41.

Наконец, в строках 20 и 21 эти же значения выводятся снова. Поскольку приращения больше не выполнялись, значение переменной myAge сейчас равно 41, как и значение переменной yourAge (все правильно: стареем мы все с одинаковой скоростью!).



Приоритеты ooepamopoo

Какое действие - сложение или умножение - выполняется первым в сложном выражении, например в таком, как это:

X = 5 + 3 . 8;

Если первым выполняется сложение, то ответ равен 8*8, или 64. Если же первым выполняется умножение, то ответ равен 5 + 24, или 29.

Каждый оператор имеет значение приоритета (полный список этих значений приведен в приложении А). Умножение имеет более высокий приоритет, чем сложение, поэтому значение этого спорного выражения равно 29.

Если два математических оператора имеют один и тот же приоритет, то они выполняются в порядке следования слева направо. Значит, в выражении

х = 5 + 3 + 8.9 + 6.4;

сначала вычисляется умножение, причем слева направо: 8*9 = 72 и 6*4 = 24. Теперь то же выражение выглядит проще:

х = 5 + 3 + 72 + 24;

Затем выполняем сложение, тоже слева направо: 5 + 3 = 8; 8 + 72 = 80; 80 + 24 = 104.

Однако будьте осторожны - не все операторы придерживаются этого порядка выполнения. Например, операторы присваивания вычисляются справа налево! Но что же делать, если установленный порядок приоритетов не отвечает вашим намерениям? Рассмотрим выражение:

TotalSeconds = NumMinutesToThink + NumMinutesToType 60

Предположим, что в этом выражении вы не хотите умножать значение переменной NumMinutesToType на число 60, а затем складывать результат со значением переменной NumMinutesToThink. Вам нужно сначала сложить значения двух переменных, чтобы получить общее число минут, а затем умножить это число на 60, получив тем самым общее количество секунд.

В этом случае для изменения порядка выполнения действий, предписанного приоритетом операторов, нужно использовать круглые скобки. Элементы, заключенные в круглые скобки, имеют более высокий приоритет, чем любые другие математические операторы. Поэтому для реализации ваших намерений приведенное выше выражение нужно представить в таком виде:

TotalSeconds = (NumMinutesToThink + NumMinutesToType) * 60

Вложение круглых скоОок

При создании сложных выражений может возникнуть необходимость вложить круглые скобки друг в друга. Например, вам нужно вычислить общее число секунд, затем общее число включенных в рассмотрение людей, а уж потом перемножить эти числа:

TotalPersonSeconds = ( ( (NumMinutesToThink + NumMinutesToType) * 60) * (PeoplelnTheOffice + PeopleOnVacation) )



1 ... 17 18 19 [ 20 ] 21 22 23 ... 265

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика