- •3.8. Упражнения 49
- •Введение
- •1. Базовые элементы
- •1.1. Комментарии
- •1.2. Функция «main»
- •1.3. Идентификаторы и пространства имен
- •1.4. Типы
- •1.5. Переменные
- •1.7. Константы
- •1.6. Преобразование типов
- •1.8. Потоковый ввод – вывод
- •1.9. Операции
- •1.9.1. Арифметические операции
- •1.9.2. Поразрядные операции
- •1.9.3. Условный оператор
- •1.9.4. Операции отношения
- •1.9.5. Логические операции
- •1.10. Стандартные математические функции
- •1.11. Упражнения
- •2. Базовые конструкции
- •2.1 Ветвление
- •2.1.1. Конструкция «if – else»
- •2.1.2. Конструкция «switch»
- •2.2. Циклы
- •2.2.1. Цикл «for»
- •2.2.2. Цикл «while»
- •2.2.3. Цикл «do – while»
- •2.2.4. Операторы циклов
- •2.2.5. Вложенность
- •2.3. Упражнения
- •2.3.1. Ветвления
- •2.3.2. Циклы
- •2.3.3. Вложенность
- •3. Указатели. Массивы. Структуры
- •3.1. Указатели
- •3.2. Массивы
- •3.2.1. Статические массивы
- •3.2.2. Динамические массивы
- •3.4. Ссылки
- •3.5. Структуры
- •3.6. Объединение
- •3.7. Переопределение типов
- •3.8. Упражнения
- •3.8.1. Статические и динамические массивы
- •3.8.2. Многомерные массивы
- •3.8.3. Строки
- •4. Функции
- •4.1. Простые функции
- •4.2. Рекурсия
- •4.3. Указатели и ссылки
- •4.3.1. Передаваемые параметры
- •4.3.2. Возвращаемые значения
- •4.3.3. Ссылки и структуры в функциях
- •4.3.4. Указатели и массивы в функциях
- •4.3.5. Указатели и ссылки на функцию
- •4.4. Шаблоны функций
- •4.5. Упражнения
- •4.5.1. Простые функции
- •4.5.2. Параметры – ссылки и параметры — указатели
- •5. Стандартные классы
- •5.1. Класс «pair»
- •5.2. Класс «complex»
- •5.3. Класс «string»
- •5.4. Контейнеры. Алгоритмы. Итераторы
- •5.5. Класс «vector»
- •5.6. Упражнения
- •5.6.1. Класс «string»
- •5.6.2. Класс «vector»
- •6. Файловый ввод – вывод
- •6.1. Операции
- •6.2. Методы
- •6.3. Флаги
- •6.4. Двоичный режим
- •6.5. Упражнения
- •Ллитература
1.4. Типы
Большинство распространенных языков программирования поддерживают различные типы данных, но их реализация зависит от конкретной аппаратной архитектуры. В языке С++ существует поддержка следующих встроенных типов, размеры которых приведены для 64-разрядной машины семейства x86.
В языке С++ существует оператор «sizeof», который поваляет определить размер типа на конкретной аппаратной архитектуре. Так размер, например, типа «float» может быть определен посредством оператора «sizeof(float)».
Каждый из приведенных типов может быть знаковым, что задается по умолчанию или при помощи спецификатора «signed», или беззнаковым, если используется спецификатор «unsigned». В случае, если переменная задана, как беззнаковая, ее старший бит, отвечающий за знак, освободится для значения. Так диапазон значений «short» лежит в пределах от -32768 до 32767, а «unsigned short» – от 0 до 65535.
Таблица 1.2. Встроенные типы.
Тип |
Размер |
Значение |
Приоритет |
long double |
12 |
Дробное |
Старший |
double |
8 |
Дробное |
|
float |
4 |
Дробное |
|
long long |
8 |
Целое |
|
long |
4 |
Целое |
|
int |
4 |
Целое |
|
short |
2 |
Целое |
|
wchar_t |
2 |
Символьное |
|
char |
1 |
Символьное |
|
bool |
1 |
Логическое |
Младший |
Типы «short», «int», «long», а также тип «long» увеличенной разрядности представляют числовые типы, типы «float», «double» и «double» увеличенной разрядности представляют дробные числа, тип «char» и «whar_t» – символьные, интерпретируемые как код некоторого символа, а «bool» – логический, принимающей одно из двух значений «true» или «false». Тип «wchar_t» был унаследован из языка С, где не являлся базовым.
В языке С++ существует еще один тип – «void». Он является базовым, однако объектов этого типа не существует, в связи с чем используется он только для определения функции, как не возвращающей какого-либо значения или непринимающей каких-либо параметров, или для задания типа указателя на объекты неизвестного типа.
1.5. Переменные
Переменные являются фундаментальной частью любого языка. Каждая из них имеет свои имя и значение. Имя переменной адресует закрепленный за ней участок памяти, и когда переменной присваивается новое значение, оно записывается в этот участок. Связывание идентификатора с выделяемой областью памяти называется объявлением, а если при этом в память заносится первоначальное значение – определением или инициализацией, при этом, если попытаться получить значение переменной до того, как ей будет впервые присвоено значение, результатом будет то, что находилось в закрепленным за переменной участке памяти до ее объявления. Если выделение памяти для переменной происходит во время выполнения программы, то оно называется динамическим, если же выделение происходит на этапе компиляции, – статическим.
Переменная может быть объявлена в каком-либо классе, в функции или пространстве имен. Если переменная объявлена в пространстве имен, но вне класса, то она является глобальной для всех классов и функций, объявленных в томже пространстве имен. Если же переменная объявлена, например, внутри функции, то она называется локальной, и внешнее к ней обращение невозможно. Таким образом, область видимости переменной может быть глобальной или локальной.
Важным параметром переменной является ее время жизни. Оно начинается с момента объявления переменной и длиться до конца блока операций, заключенных в фигурные скобки, в которых объявлена и сама переменная, или до конца выполнения программы, в зависимости от спецификатора, выделяющего память одного из четырех классов. Спецификатор «auto» используется по умолчанию, без необходимости его явного указания, и задает время жизни до конца блока операций. Спецификатор «register» позваляет сохранять переменную не в оперативной памяти, а в свободном регистре. В случае, если свободного регистра нет, переменная станет «auto». Спецификатор «extern» сообщает компилятору о том, что переменная будет объявлена (уже без спецификатора «extern») в другом файле. Спецификатор «static» увеличивает время жизни до конца выполнения программы. Так для переменной, объявленной как «static» в функции, память выделиться только один раз – при первом вызове функции, а сама переменная будет сохранять свое значение между вызовами. Еще одним эффектом применения данного спецификатора является инициализация переменной нулевым значением и ограничение ее видимости текущим файлом.
