Пятница, 17.11.2017, 23:18
Приветствую Вас Гость | RSS

Кузница миров

Меню сайта
Категории раздела
Мои статьи [2]
Курс : "Основы С++ для начинающих программистов игр." [25]
WindMill Engine [3]
XNA4 RPG [0]
Перевод туториалов но созданию RPG на C# c XNA4.
C# & Leadwerks [5]
Программирование Leadwerks Engine на языке С# с помощью врапера Le.NET.

Каталог статей и уроков

Главная » Статьи » Курс : "Основы С++ для начинающих программистов игр."

3.1: Повторение – мать учения. ИН и ДЕ
3.1: Повторение – мать учения.


Здравствуйте. Не волнуйтесь. Специально возвращаться к ранее изученному материалу нам не придется, поскольку и так в каждом последующем уроке мы будем использовать все, что выучили раньше. А как же иначе. Все что я вам рассказываю это самые основы, стержень языка, который наличествует в программе любой сложности. А повторение я упомянул по той причине, что сейчас мы будем учить способ, с помощью которого в языке C++ можно многократно, циклически выполнять одни и те же действия. Например, в прошлом уроке один блок кода выполнялся шесть раз. Этого можно было избежать, если бы вы были знакомы с методами организации циклов.

1. Ин и Де

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

Code

А = 5;
А++;    // А станет равно шести
А--;    // А вновь станет равно пяти



Эта запись аналогична следующей:

Code

А = 5;
А = А + 1;    // А станет равно шести
А = А - 1;    // А вновь станет равно пяти


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

Code

--А;
++А;



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

Code

int x=1, y;
y=(x++) * 5;



Здесь сначала х умножится на пять, значение будет присвоено у, а затем сработает инкремента и х увеличится на единицу. В результате у == 5, х == 2.
Обратите внимание на использование скобок. Если этого не сделать, то компилятор потеряется в нагромождении операторов. Про ошибку он не скажет, но вот результат будет непредсказуемый.
Ну и пример для префиксной записи:

Code

int x=1, y;
y=(++x) * 5;



В этом случае сначала х будет увеличен, а затем умножен на 5. В результате у == 10, х == 2.

Надеюсь, что вам все понятно.
Кроме того как эти операторы работают, необходимо знать что префиксная их запись работает быстрее чем постфиксная. И вот почему:

Code

y=(x++) * 5;



Когда при выполнении программы с этой строкой доходит очередь до инкременты, создается временная переменная, в которую записывается новое, увеличенное значение х. А потом, после вычисления выражения значение временной переменной обратно присваивается х. Естественно на все это тратится лишнее время. Чисто теоретически это выглядит так:

Code

int temp;    // создается временная переменная
temp=x+1;    // ей присваивается увеличенный х, при этом сам х не меняется.
y=x*5;  // х умножается 5, результат присваивается у
x=temp;  // х присваивается значение временной переменной



Конечно, если оператор выполняется всего один раз, то затраты времени не ощутимы, а вот если это где-то в цикле повторяется несколько сотен а то и тысяч раз, то это уже совсем другое дело.

Раз мы уже упомянули способы упрощения и улучшения кода, расскажу вам еще и о вариантах оператора присвоения.
Запись:

Code

А = А + 1;



Можно упростить так:

Code

А+=1;



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

Code

А-=5;
А*=10;
А/=3;



Эти записи идентичны следующим:

Code

А = А - 5;
А = А * 10;
А = А / 3;

Категория: Курс : "Основы С++ для начинающих программистов игр." | Добавил: nilrem (24.10.2011)
Просмотров: 573 | Комментарии: 1 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0