Первым шагом по овладению языком С++ является изучение его основ и библиотеки — такова тема части I, "Основы". В главе 2 рассматриваются встроенные типы данных, а также обсуждается механизм определения новых, собственных типов. В главе 3 описаны два фундаментальных библиотечных типа: string
(строка) и vector
(вектор). В этой же главе рассматриваются массивы, представляющие собой низкоуровневую структуру данных, встроенную в язык С++, и множество других языков. Главы 4-6 посвящены выражениям, операторам и функциям. Завершается часть главой 7 демонстрирующей основы построения собственных типов классов. Как мы увидим, в определении собственных типов примиряется все, что мы изучили до сих пор, поскольку написание класса подразумевает использование всех средств, частично раскрытых в части I.
Глава 2
Переменные и базовые типы
Типы данных — это основа любой программы: они указывают, что именно означают эти данные и какие операции с ними можно выполнять.
У языка С++ обширная поддержка таких типов. В нем определено несколько базовых типов: символы, целые числа, числа с плавающей запятой и т.д. Язык предоставляет также механизмы, позволяющие программисту определять собственные типы данных. В библиотеке эти механизмы использованы для определения более сложных типов, таких как символьные строки переменной длины, векторы и т.д. В этой главе рассматриваются встроенные типы данных и основы применения более сложных типов.
Тип определяет назначение данных и операции, которые с ними можно выполнять. Например, назначение простого оператора i = i + j
; полностью зависит от типов переменных i
и j
. Если это целые числа, данный оператор представляет собой обычное арифметическое сложение. Но если это объекты класса Sales_item
, то данный оператор суммирует их компоненты (см раздел 1.5.1).
2.1. Простые встроенные типы
В языке С++ определен набор базовых типов, включая арифметические типы (arithmetic type), и специальный тип void
. Арифметические типы представляют символы, целые числа, логические значения и числа с плавающей запятой. С типом void
не связано значений, и применяется он только при некоторых обстоятельствах, чаще всего как тип возвращаемого значения функций, которые не возвращают ничего.
2.1.1. Арифметические типы
Есть две разновидности арифметических типов: целочисленные типы (включая символьные и логические типы) и типы с плавающей запятой.
Размер (т.е. количество битов) арифметических типов зависит от конкретного компьютера. Стандарт гарантирует минимальные размеры, перечисленные в табл. 2.1. Однако компиляторы позволяют использовать для этих типов большие размеры. Поскольку количество битов не постоянно, значение одного типа также может занимать в памяти больше или меньше места.
Таблица 2.1. Арифметические типы языка С++
Тип | Значение | Минимальный размер |
---|---|---|
bool
|
Логический тип | Не определен |
char
|
Символ | 8 битов |
wchar_t
|
Широкий символ | 16 битов |
char16_t
|
Символ Unicode | 16 битов |
char32_t
|
Символ Unicode | 32 бита |
short
|
Короткое целое число | 16 битов |
int
|
Целое число | 16 битов |
long
|
Длинное целое число | 32 бита |
long long
|
Длинное целое число | 64 бита |
float
|
Число с плавающей запятой одинарной точности | 6 значащих цифр |
double
|
Число с плавающей запятой двойной точности | 10 значащих цифр |
long double
|
Число с плавающей запятой повышенной точности | 10 значащих цифр |