Реклама

C++ - Урок 002. Типы данных, Переменные и Арифметика

C++, int, char, double, auto, nullptr

Каждая переменная или выражение имеет свой тип данных, например, объявление

int some_variable;

указывает, что переменная some_variable имеет целочисленный тип int.

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

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

Фундаментальные типы данных

C++ предоставляет следующие фундаментальные типы данных.

void

void - является типом данных с пустым набором значений. Является незавершённым и не может быть установлен для объектов и переменных. Однако, позволяется использовать указатели на тип void, а также использовать void в качестве значения, возвращаемого функциями.

nullptr

nullptr - особый тип данных, который сам себе не является типом как таковым, поскольку его нельзя установить в качестве типа переменной, но он может использоваться в качестве нулевого указателя. Данный тип был введён в стандарте С++11 вместо определяемой реализацией нулевой макроконстанты NULL.

boolean

bool - логический тип данных, которые принимает значение true или false . Размер памяти, которую занимает данный тип данных может отличаться от 1 в зависимости от реализации в целевой системе. Определить размер можно с помощью оператора sizeof(bool).

Символьные типы

char - Символьные типы используются для представления текстовых символов. Размер символьного типа char 1 байт, что позволяет содержать 256 различных символов. Представление всех символов можно найти в таблице символов ASCII.

Символьные типы данных делятся на три типа:

  • signed char - знаковый тип
  • unsigned char - беззнаковый тип
  • char - отдельный тип, который может быть как знаковым, так и беззнаковым, в зависимости от того, как отработает код компилятор.

Различие в диапазоне значений, например:

  • char -128...127
  • unsigned char 0...255

char может использоваться для хранения целочисленных значений, которые не превышают одного байта, но лучше использовать для целочисленных значений всё-таки тип Int. Но такое допустимо для встраиваемых систем, с жёстко ограниченным объёмом памяти.

Также имеются особые типы символьных данных:

  • wchar_t - тип для представления символов, которым недостаточно одного байта. Это может быть 32 бита для ОС, поддерживающих UNICODE, или 16 бит в нотации Windows для UTF-16.
  • char16_t - тип для представления UTF-16, введён в стандарте C++11 .
  • char32_t - тип для представления UTF-32, введён в стандарте C++11 .

int

int - целочисленный тип данных. Могут использоваться модификаторы, определяющие размер памяти, выделяемый под этот тип данных. Если нет модификаторов, то гарантируется, что размер типа данных не менее 16-ти бит. Однако, на большинстве 32/64 разрядных систем гарантируется, что занимаемый размер не менее 32-х бит.

Модификаторы

Знаковые модификаторы

  • signed - представление знакового типа данных (если опущено, то подразумевается по умолчанию)
  • unsigned - представление беззнакового типа данных.

Модификаторы размера

  • short - целевой тип оптимизируется, чтобы размер был не менее 16 бит
  • long - целевой тип оптимизируется, чтобы размер был не менее 32 бит

Модификатор long можно применять к типу данных дважды, что даёт оптимизацию занимаемого переменной пространства не менее 64 бит. Данная оптимизация введена в стандарте C++11.

long long int

Модификаторы размера и знаковости можно также комбинировать.

signed long long int

Типы данных с плавающей точкой

  • float - 32-х разрядный тип данных с плавающей точкой.
  • double - 64-х разрядный тип данных с плавающей точкой.
  • long double - расширенный тип данных с плавающей точкой, введён в стандарте C++11.

Кстати, при разработке программного обеспечения можно заметить по использованию этих типов данных, какой разработчик начинал с чистого C, а какой начинал с C++. Поголовное использование float характерно для разработчиков, которые начинали с C, double же характерен для C++ разработчиков.

Переменные

Таким образом, переменные могут иметь типы данных, перечисленные выше, например:

int a = 12;       // Целочисленный тип, переменная равна 12
double b = 12.25; // Вещественный тип с плавающей точкой двойной точности, переменная равна 12.25
char c = 'a';     // Символьный тип, переменная равна символу "a"

Инициализация переменных может производиться несколькими способами.

double a1 = 2.3;
double a2 = {2.3};
double a3 {2.3};

Инициализация с фигурными скобками была введена в стандарте C++11. При инициализации фигурными скобками не позволяется неявное преобразование, поэтому компилятор выдаст ошибку в следующих случаях.

int d1 = {2.3};
int d2 {2.3};

auto

Также для объявления переменных в стандарте C++11 был введён спецификатор auto , который позволяет объявлять переменную, без указания типа. В данном случае тип выводится из инициализатора, то есть значения, которое будет присвоено переменной. Таким образом auto невозможно использовать без инициализатора, то есть

// Правильный, рабочий вариант
auto a = 14; 
// Не правильный вариант, не скомпилируется
auto b;
b = 15;

Спецификатор auto может использоваться для объявления лямбда функций, или переменных с очень сложным объявлением, что ведёт к упрощению программного кода.

Арифметика

Над переменными базовых типов можно выполнять различные арифметически операции:

x+y   // сложение
+x    // унарный плюс
x-y   // вычитание
-x    // унарный минус
x*y   // умножение
x/y   // деление
x%y   // остаток от деления

Также возможно использование операций сравнение:

x==y  // равно
x!=y  // не равно
x<y   // меньше чем
x>y   // больше чем
x<=y  // меньше чем или равно
x>=y  // больше чем или равно

В дополнение к арифметическим и логическим операциям функционал C++ предлагает более специфические операции:

x+=y  // x = x+y
++x   // increment: x = x+1
x−=y  // x = x-y
−−x   // decrement: x = x-1
x∗=y  // x =x*y
x/=y  // x = x/y
x%=y  // x = x%y
Реклама

Комментарии

Переменная аuto доступна для использования в Qt?

Да, доступна. Только нужно использовать стандарт C++11, но насколько помню, Вы используете устаревшие стандарты C++, поэтому у вас вряд ли она будет работать.

Комментарии

Только авторизованные пользователи могут оставлять комментарии.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
  • leha
  • 20 октября 2017 г. 11:38

Qt - Тест 001. Сигналы и слоты

  • Результат 63 баллов
  • Очки рейтинга -1
  • faust
  • 19 октября 2017 г. 18:53

C++ - Тест 005. Структуры и Классы

  • Результат 100 баллов
  • Очки рейтинга 10
  • faust
  • 19 октября 2017 г. 15:49

C++ - Тест 002. Константы

  • Результат 91 баллов
  • Очки рейтинга 8
Последние комментарии
  • EVILEG
  • 21 октября 2017 г. 3:06

Qt/C++ - Урок 031. QCustomPlot - строим график по времени

Добавил архив с проектом

  • EVILEG
  • 20 октября 2017 г. 20:06

Qt/C++ - Урок 031. QCustomPlot - строим график по времени

После работы поищу, должен где-то быть на винте.

  • Миша
  • 20 октября 2017 г. 20:04

Qt/C++ - Урок 031. QCustomPlot - строим график по времени

не могли бы вы выложить архив с рабочей версией скрипта?

  • EVILEG
  • 20 октября 2017 г. 20:03

Qt/C++ - Урок 030. QCustomPlot - быстрый старт в работе с графиками

Использование дизайнера в Qt Creator и использование ui файлов является распространённой практикой в Qt фреймворке. Написать отдельную статью про то, что это такое? - может быть. Опи...

  • Миша
  • 20 октября 2017 г. 19:43

Qt/C++ - Урок 030. QCustomPlot - быстрый старт в работе с графиками

Но почему вы это не описали? Не могли бы вы описать.

Сейчас обсуждают на форуме
  • cordsac
  • 19 октября 2017 г. 15:49

How can I select the QGraphicView Item and change the properties

Ok I'll check it sir,If you can please do article(tutorial) about this,Its really useful.Thank you if you can give me some sample code when you free.thanks again

  • cordsac
  • 17 октября 2017 г. 19:28

How can I open SVG file through QT

Okay,Thank you sir :)

  • EVILEG
  • 16 октября 2017 г. 20:34

Qt, Загрузка изображения в QImage

Сам view нужно поместить в внутри окна, а не просто создать его. Можете создать в графическом редакторе Qt Creator`а окно, набросать там QGraphicsView и потом посмотреть в сгенерированном...

  • mihenze
  • 15 октября 2017 г. 21:30

Рисуем линию QGraphicsItem за мышью

Большое спасибо!

  • EVILEG
  • 15 октября 2017 г. 18:58

Описание класса С++ в QtCreator

Для начала добавьте недостающие методы и участники для Q_PROPERTY. Для этого вызовите контекстное меню через ПКМ у Q_PROPERTY, там будет пункт "добавить недостающие члены". Автоматически...