PDA

Просмотр полной версии : Уроки C++



vpadlo
18.01.2007, 22:05
В теме "Как заставить противника капитулировать? (http://forum.civfanatics.ru/index.php?showtopic=5161)" родилась идея пмочь иследователям SDK разобратся с C++.
Так что все вопросы связанные с аспектами програмирования в C++ задавайте здесь, постараюсь ответить.

З.Ы. Как и обещал, в указанной выше теме, вот список знаков используемых в C++

"==" -- равно
"!=" -- не равно
"<" -- меньше
">" -- больше
"<="- - меньше или равно
">=" -- больше или равно
"%" -- остаток(деление по модулю)
"++" -- инкримент
"--" -- декримент
"=" -- присвоить значени
"||" -- ИЛИ
"&&" -- И
"!" -- НЕ (отрицание)
"&" -- побитовое И
"|" -- побитовое ИЛИ
"^" -- побитовое исключающее ИЛИ
Список далеко не полный, это то что мне сразу пришло на ум.

NeverMind
18.01.2007, 22:30
Спасибо! Скопировал себе, буду зубрить :D

А кто "такие инкримент, декримент"? Чем "равно" отличается от "присвоить значение"? И что значит "побитовое" И, ИЛИ и тд?

vpadlo
18.01.2007, 22:52
<div class='quotetop'>Цитата(NeverMind * 18.1.2007, 21:30) 156049</div>

Спасибо! Скопировал себе, буду зубрить :D

А кто "такие инкримент, декримент"? Чем "равно" отличается от "присвоить значение"? И что значит "побитовое" И, ИЛИ и тд?
[/b]
1. Инкримент и декримент это увеличение и уменьшение на 1.

i++; //эта команда увеличит значение переменной i на 1
2. Равно используется для сравнения двух значений. Можно сказать что это функция возвращающая истину(true) если два значения идентичны и ложь(false) если нет. А присвоение используется для изменения какого либо значения.

i = 5; //установить значение переменной равное 5
3. О побитовых операторах раскажу потом, сейчас спешу...

Дмитрий_rnd
19.01.2007, 09:31
<div class='quotetop'>Цитата(vpadlo * 18.1.2007, 22:52) 156054</div>

1. Инкримент и декримент это увеличение и уменьшение на 1.

i++; //эта команда увеличит значение переменной i на 1
[/b]
Причем различают префиксное и постфиксное написание:
* i++ это возвращает начальное значение i, после чего увеличивает i
* ++i - i увеличивается, после чего возвращается уже увеличенное значение

<div class='quotetop'>Цитата(vpadlo * 18.1.2007, 22:52) 156054</div>

2. Равно используется для сравнения двух значений. Можно сказать что это функция возвращающая истину(true) если два значения идентичны и ложь(false) если нет. А присвоение используется для изменения какого либо значения.

i = 5; //установить значение переменной равное 5
[/b]
Добавлю еще: любой оператор в с++ возвращает какое-то значение и поэтому может впоследствии использовать его. Например:

i = 1;
m = n = i++;
вторая строка выполнится так: i увеличится на один, но переменной n присвоится прежнее значение (1), после чего произойдет присвоение переменной m значения n (1)
т.е. i будет равно 2, а n и m будут равны 1

General
19.01.2007, 11:34
vpadlo, отличная идея разобрать С++!
Давайте я расскажу про побитовые операторы.

Итак, числа хранятся в памяти в двоичной системе. К примеру, число 2007 типа unsigned short int (про типы можно подробнее поговорить позже) занимает в памяти 2 байта и имеет вид 0000011111010111, где каждый бит принимает значение 0 или 1.
Возьмём другое число, скажем, 4000, имеющее в двоичной системе вид 0000111110100000 и вычислим результаты побитовых операторов &, | и ^ между ними.

Использование побитового И:
[code]

Blacksun
19.01.2007, 12:30
<div class='quotetop'>Цитата(The Pretender * 19.1.2007, 9:31) 156142</div>


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

i = 1;
m = n = i++;
вторая строка выполнится так: i увеличится на один, но переменной n присвоится прежнее значение (5), после чего произойдет присвоение переменной m значения n (5)
т.е. i будет равно 6, а n и m будут равны 5
[/b]

Наверное здесь значения будут 1 и 2 ... (Первая то строка присваивает значение 1 переменной i...)

З.Ы. General - или - это || (и - по мому &&, с исключающее или редко работаю, поэтому не помню)) - в С++ (Назови уж и название операций - и, или, исключающее или...)

NeverMind
19.01.2007, 12:38
Ну, вы это....разошлись. Помедленнее, я записываю :harhar:

Столько народу, оказывается, в этом разбирается :shy2:. А давайте, вы будете смотреть SDK периодически и что-нибудь объяснять, м?

Blacksun
19.01.2007, 13:00
<div class='quotetop'>Цитата(NeverMind * 19.1.2007, 12:38) 156192</div>

Ну, вы это....разошлись. Помедленнее, я записываю :harhar:

Столько народу, оказывается, в этом разбирается :shy2:. А давайте, вы будете смотреть SDK периодически и что-нибудь объяснять, м?
[/b]

Это практически невозможно. 169 файлов, (47 или 49 основных) Каждый из которых от 10 до 20 тыс. строк. Описывать все это - практически невозможно. Даже если брать отдельно взятую тему - приходится просматривать очена много функций. :nerves: Вот если делаешь чего то в СДК - тогда еще можно отследить "Нужные для тебя места". Но опять же - самый простой алгоритм - требует написания кучи побочных функций... (См. связь СДК и Питон, связь СДК и ХМЛ...). В процессе написания модов - я конечно буду описывать некоторые функции и подводные камни. Но одному - это очена тяжело (У меня реала тоже много). С тех пор - как начал писать моды (в СДК) - я забыл, когда последний раз играл в Циву... (тесты не в счет - они играются на слабом уровне - чтобы побыстрее...)

General
19.01.2007, 13:10
Blacksun
Так то удвоенным символом обозначается логический оператор, а одинарным - побитовый. Глянул в справочник - а в С++ логического исключающего ИЛИ вообще нет, а побитовое есть.
Названия подписал.

NeverMind
Эхх, тут бы мне со своим собственным кодом разобраться.... Где-то баг неотловленный сидит, а начальство уже требует резалты. Но определённый моменты прояснить смогу, видимо.

Дмитрий_rnd
19.01.2007, 16:07
<div class='quotetop'>Цитата(Blacksun * 19.1.2007, 12:30) 156188</div>


Наверное здесь значения будут 1 и 2 ... (Первая то строка присваивает значение 1 переменной i...)
[/b]сорри, опечатка ... поправил

NeverMind
20.01.2007, 00:49
Кхм. В общем проблема не в подсказывании, а в объяснении игровых моментов с помощью SDK. Если кто то будет смотреть я тоже могу подсказать, т.к SDK во многом перекликается с XML. Лично у меня были проблемы с этими знаками (свои фэнтази теории), теперь есть где посмотреть. :.V.:


Originally posted by Blacksun
Это практически невозможно. 169 файлов, (47 или 49 основных) Каждый из которых от 10 до 20 тыс. строк. Описывать все это - практически невозможно. Даже если брать отдельно взятую тему - приходится просматривать очена много функций.
А не надо все. И не надо все подряд. Задается куча вопросов, на которые можно ответить посмотрев SDK. Вот бы с этого начать. :w00t:

PS. Zюzиk, Blacksun, когда доучу знаки, я к вам присоединюсь тут: http://forum.civfanatics.ru/index.php?showtopic=5307 :secret:

PPS. Теперь еще БуДДаХ с пивом...:whistle:

BuDDaH
20.01.2007, 00:54
Ешкин кот! Итить! Ну развели...И это ликбез? Я по-другому понимал это слово. Ладно, я осознал, что я дурак.
ЗЫ Простите за оффтоп. Не удержался...Эмоции..эмоции и много пива...

Kerim
20.01.2007, 16:47
Вау С++, отличная вещь, давайте сюда полный курс выложим.

General
21.01.2007, 00:58
К примеру, вот начальный (http://www.intuit.ru/department/pl/cpp/) и продвинутый (http://www.intuit.ru/department/pl/cpp2/) курсы С++.

А здесь ИМХО основное назначение ветки - разъяснять тонкости, а не всю теорию