Изучаем C++. Часть 2. Переменные, константы и операции с ними

Разбираемся, как работать с данными в программе на C++. Будет много теории и примеров, чтобы вы углубились в язык ещё больше.

Это вторая часть из серии «Глубокое погружение в C++». В прошлый раз мы разобрались, что такое программа и из чего она состоит, а сейчас узнаем азы работы с данными.

Что такое данные и как они хранятся в программах

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

Евгений Кучерявый

Пишет о программировании, в свободное время создает игры. Мечтает открыть свою студию и выпускать ламповые RPG.


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

Давайте рассмотрим это на примере коробок:

Мы говорим компьютеру, что нам нужна коробка x, которая будет хранить целые числа, но пока не помещаем в неё никакого значения. Компьютер создаёт такую коробку, подписывает её и помещает в неё null.

Далее мы пишем команду x = 5;, и компьютер меняет значение внутри коробки. Размер коробки при этом не меняется. Так получается, потому что для хранения каждого примитивного типа данных выделяется определённое количество памяти. Например, для целых чисел это четыре байта, что позволяет хранить значения в диапазоне от −2 147 483 648 до 2 147 483 647.

Коробки, описанные выше, в программировании называются переменными (англ. variable). Их значение можно менять во время работы программы. Также существуют коробки, которые менять нельзя, — их называют константами.

То, какие данные сейчас хранятся в памяти, называется состоянием. Состояние может быть у программы, системы, компьютера и так далее. В C++ очень важно иметь доступ к состоянию, чтобы писать полезные программы.

Переменные в C++

Теперь попробуем создать свои переменные.

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

КодКак читается
int x;Объявить целочисленную переменную x без значения.

Так создаётся переменная без значения. Если вы хотите, чтобы в ней сразу было какое-то число, то нужно использовать знак присваивания (=):

КодКак читается
int y = 5;Объявить целочисленную переменную y со значением 5.

Теперь в любое время можно менять значения переменных:

КодКак читается
x = 6;Присвоить переменной x значение 6.

Математический знак равенства (=) в программировании называется знаком присваивания.

Важно! Указывать тип данных нужно только при объявлении переменной.

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

#include <iostream>

int main()
{
    int age = 21;

    std::cout << "Your age is ";
    std::cout << age;
    std::cout << "\n";
}

Внимательно прочтите этот код, а потом скомпилируйте и запустите программу:

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

Допустимые имена для переменных

Идентификаторы переменных могут содержать в себе:

  • латинские буквы;
  • цифры;
  • знак нижнего подчёркивания.

При этом название не может начинаться с цифр. Примеры названий:

  • age;
  • name;
  • _sum;
  • first_name;
  • a1;
  • a2;
  • a_5.

Все идентификаторы регистрозависимы. Это значит, что name и Name — разные переменные.

Рекомендуется давать именам простые названия на английском языке, чтобы код был понятен и вам, и другим людям. Например:

  • price, а не stoimost;
  • currentId, а не pupa;
  • carsCount, а не lupa и так далее.

Если название должно состоять из нескольких слов, то рекомендуется использовать camelCase (с англ. «верблюжий регистр»): первое слово пишется со строчной буквы, а каждое последующее — с заглавной.

camelCase наглядно

Типы данных в программировании

Чаще всего используются следующие типы данных:

  • int целое число;
  • byte число от 0 до 255;
  • float число с плавающей запятой;
  • double число с плавающей запятой повышенной точности;
  • char символ;
  • bool логический тип, который может содержать в себе значения true (истина) и false (ложь).

Эти типы данных называются примитивными (значимыми), потому что они базово встроены в язык.

Также существуют ссылочные типы такие переменные хранят в себе не само значение, а ссылку на него в оперативной памяти. К ссылочным типам относятся массивы, объекты, строки (так называют любой текст) и многое другое. Для строк используется тип std: string.

Вот несколько примеров переменных разных типов:

//Строки записываются внутри двойных кавычек
std::string name = "Evgenii Kucheriavyi"; 

int age = 21;

//Символы записываются внутри одинарных кавычек
//Тип char вмещает в себя только один символ
char firstNameInitial = 'E'; 
char lastNameInitial = 'K'; 

//Дробная часть числа записывается после точки
//После самого числа должна стоять буква F
float x = 5.4F; 
float y = 7.3F; 

//Для типа double буква F не нужна
double discount = 0.4; 

bool isHungry = true; //Истина
bool hasFood = false; //Ложь

Комментарии в C++

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

Есть два типа комментариев:

  1. Однострочные их вы видели в примере выше. Всё, что находится после двойных слэшей и до конца строки — комментарий.
  2. Многострочные для них используются символы /* (начало комментария) и */ (конец комментария).

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

Константы в C++

Чтобы создать константу, используйте ключевое слово const:

const double Pi = 3.14;
const double g = 9.8;

Константы обычно нужны, чтобы хранить какие-то постоянные величины из физики, математики или геометрии: число пи, ускорение свободного падения, скорость света и так далее. Однако вы можете хранить в них и другие значения, которые должны оставаться постоянными:

  • частоту обновления экрана (например, 60 кадров в секунду);
  • ваш год рождения;
  • имя персонажа в игре и так далее.

Математические операции в C++

В С++ есть пять базовых математических операций:

  1. Сложение (+).
  2. Вычитание (-).
  3. Умножение (*).
  4. Деление (/).
  5. Остаток от деления (%).

Используются они следующим образом:

int a = 2 + 2; //4
int b = 6 - 3; //3

//В вычислениях можно использовать переменные и константы
int c = 11 - b; //8

int d = 12 / 6; //2

//Так как int может содержать в себе только целые числа, остаток от деления будет отброшен
int e = 13 / 5; //2

int f = 13 % 5; //3

//Чтобы получить более точный результат деления, нужно использовать дробные числа
double g = 13.0 / 5; //2.6

//При делении целых чисел даже в типах double или float результатом деления будет целое число, без остатка
double j = 13 / 5; //2

int h = 5 * 5; //25

//Вы можете использовать скобки, чтобы определить порядок действий
int k = 5 + 2 * 2; //9
int l = (5 + 2) * 2; //14

//Можно использовать отрицательные числа
int m = 2 + -2; //0

Важно! Сначала выполняется правая часть выражения после знака =, а потом левая. То есть переменной не будет присвоено значения, пока не выполнены все вычисления. Поэтому можно записать в переменную результат вычислений, в которых использовалась эта же переменная:

int x = 2;
x = x + 5; //7

Если вам нужно провести какую-то операцию с переменной, а потом записать значение в неё же, используйте следующие операторы:

x += 5; //x = x + 5;
x -= 7; //x = x - 7;
x *= 2; //x = x * 2;
x /= 3; //x = x / 3;
x %= 8; //x = x % 8;

Во время работы с С++ вы будете часто прибавлять или отнимать единицу от какой-нибудь переменной. Для этого тоже есть сокращённая запись:

//Инкремент (увеличение переменной)
x++; //x = x + 1;

//Декремент (уменьшение переменной)
x--; //x = x - 1;

Инкремент и декремент могут быть префиксными (++x) и постфиксными (x++). Префиксный инкремент сначала прибавляет к переменной единицу, а потом использует эту переменную, а постфиксный — наоборот.

int x = 5;

//Сначала к x будет прибавлена единица, и только потом он будет использован в выражении
int y = ++x + 2; //8

//Сначала x будет использован в выражении, и только потом к нему будет прибавлена единица
int z = x++ + 2; //7

Заключение

Единственный способ разобраться, как это всё работает, — практиковаться. Придумайте программы, которые могли бы использовать переменные:

  • калькулятор для уравнений;
  • определитель размера скидки или комиссии;
  • вывод суммы характеристик персонажа и так далее.

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

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

Курс

Профессия
Разработчик на C++ с нуля


Вы пройдёте полный курс по С++ и прикладной курс по Unreal Engine 4. Вы научитесь работать с многопоточностью, использовать инструменты и средства разработки: Git, GCC, GDB. Вам будет проще найти работу программиста в геймдеве.

Хочешь получать крутые статьи по программированию?
Подпишись на рассылку Skillbox