Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Язык программирования C++. Учебное пособие
.pdf
Имена, переменные и константы
Правила именования переменных и функций языка, правила записи
констант. Понятие ключевого или зарезервированного слова, список
ключевых слов Си++.
Имена
Для символического обозначения величин, имен функций и т.п.
используются имена или идентификаторы .
Идентификаторы в языке Си++ – это последовательность знаков,
начинающаяся с буквы или знака подчеркивания. В идентификаторах
можно использовать заглавные и строчные латинские буквы, цифры и
знак подчеркивания. Длина идентификаторов произвольная. Примеры
правильных идентификаторов:
abc A12 NameOfPerson BYTES_PER_WORD
Отметим, что abc и Abc – два разных идентификатора, т.е. заглавные и
строчные буквы различаются. Примеры неправильных
идентификаторов:
12X a-b
Ряд слов в языке Си++ имеет особое значение и не может
использоваться в качестве идентификаторов. Такие зарезервированные
слова называются ключевыми.
Список ключевых слов:
№ п/п Ключевое слово Описание
1 and альтернатива оператору &&
2 and_eq альтернатива оператору &=
3 asm вставить код на ассемблере
4 auto объявить локальную переменную
5 bitand альтернатива оператору bitwise &
6 bitor альтернатива оператору |
7 bool объявить булеву переменную
Язык программирования C++Фридман А.Л.
11

8 break выйти с цикла
9 case определенная ветка в операторе ветвления switch
10 catch обработать исключение от throw
11 char объявить символьную переменную
12 class объявить класс
13 compl альтернатива оператору ~
14 const объявить неизменяемые данные или функцию, которая не изменяет данных
15 const_cast приведение типа от константной переменной
16 continue пропустить код до конца цикла и начать новую итерацию
17 default вариант по умолчанию в switch
18 delete освобождение памяти, выделенной new
19 do оператор цикла
20 double объявить вещественное число двойной точности
21 dynamic_cast выполнить приведение типов во время выполнения
22 else ветка оператора if, которая выполняется при ложном условии
23 enum создание перечисляемого типа
24 explicit использовать данный конструктор только при полном соответствии типов
25 export позволить разделить объявление и реализацию шаблона
26 extern указание компилятору, что переменная объявлена в другом файле
27 false константа для ложного значения булевой переменной
28 float объявить вещественную переменную
29 for оператор цикла
30 friend разрешить другим функциям доступ к приватным данным класса
31 goto безусловный переход
32 if оператор условия
33 inline оптимизация вызовов для функций (встраиваемые функции)
34 int объявить переменную целого типа
35 long объявить следующий тип длинным
36 mutable перекрыть константность
37 namespace определить новое пространство имен
38 new выделить динамическую память под новую переменную
39 not альтернатива оператору !
40 not_eq альтернатива оператору !=
41 operator создание перегруженных операторов
42 or альтернатива оператору ||
43 or_eq альтернатива оператору |=
44 private объявить приватное поле класса
45 protected объявить защищенное поле класса
46 public объявить общее поле класса
Язык программирования C++Фридман А.Л.
12

47 register запрос компилятору на оптимизацию переменной по скорости
48 reinterpret_cast изменить тип переменной
49 return возврат из функции
50 short объявить короткое целое
51 signed сделать данный целый тип знаковым
52 sizeof возвратить размер переменной или типа
53 static создать статическую переменную
54 static_cast сделать не полиморфное приведение типов
55 struct определить новую структуру
56 switch оператор ветвления
57 template создать шаблонную функцию
58 this указатель на текущий объект
59 throw выбросить исключение
60 true константа для истинного значения булевой переменной
61 try выполнить код, который может выкинуть исключение
62 typedef создание нового типа с существующего
63 typeid задать описание объекта
64 typename объявить класс или иной новый тип данных
65 union структура, содержащая несколько переменных в одной области памяти
66 unsigned объявить беззнаковое целое
67 using импортировать полностью или частично указанное пространство имен внутрь текущего блока
68 virtual создать виртуальную функцию
69 void объявить функцию или переменную без типа
70 volatile предупреждение компилятору, что переменная может измениться сама
71 wchar_t объявить переменную типа wide-character
72 while оператор цикла
73 xor альтернатива оператору ^
74 xor_eq альтернатива оператору ^=
В следующем примере
int max(int x, int y)
{
if (x > y)
return x;
else
return y;
}
Язык программирования C++Фридман А.Л.
13

max, x и y – имена или идентификаторы. Слова int, if, return и
else – ключевые слова, они не могут быть именами переменных или
функций и используются для других целей.
Переменные
Программа оперирует информацией, представленной в виде различных
объектов и величин. Переменная – это символическое обозначение
величины в программе. Как ясно из названия, значение переменной
(или величина, которую она обозначает) во время выполнения
программы может изменяться.
С точки зрения архитектуры компьютера, переменная – это
символическое обозначение ячейки оперативной памяти программы, в
которой хранятся данные. Содержимое этой ячейки – это текущее
значение переменной.
В языке Си++ прежде чем использовать переменную, ее необходимо
объявить. Объявить переменную с именем x можно так:
int x;
В объявлении первым стоит название типа переменной int (целое
число), а затем идентификатор x – имя переменной. У переменной x
есть тип – в данном случае целое число. Тип переменной определяет,
какие возможные значения эта переменная может принимать и какие
операции можно выполнять над данной переменной. Тип переменной
изменить нельзя, т.е. пока переменная x существует, она всегда будет
целого типа.
Язык Си++ – это строго типизированный язык. Любая величина,
используемая в программе, принадлежит к какому-либо типу. При
любом использовании переменных в программе проверяется,
применимо ли выражение или операция к типу переменной. Довольно
часто смысл выражения зависит от типа участвующих в нем
переменных.
Например, если мы запишем x+y, где x – объявленная выше
переменная, то переменная y должна быть одного из числовых типов.
Язык программирования C++Фридман А.Л.
14

Соответствие типов проверяется во время компиляции программы.
Если компилятор обнаруживает несоответствие типа переменной и ее
использования, он выдаст ошибку (или предупреждение). Однако во
время выполнения программы типы не проверяются. Такой подход, с
одной стороны, позволяет обнаружить и исправить большое количество
ошибок на стадии компиляции, а, с другой стороны, не замедляет
выполнения программы.
Переменной можно присвоить какое-либо значение с помощью
операции присваивания. Присвоить – это значит установить текущее
значение переменной. По-другому можно объяснить, что операция
присваивания запоминает новое значение в ячейке памяти, которая
обозначена переменной.
int x; // объявить целую переменную x
int y; // объявить целую переменную y
x = 0; // присвоить x значение 0
y = x + 1; // присвоить y значение x + 1,
// т.е. 1
x = 1; // присвоить x значение 1
y = x + 1; // присвоить y значение x + 1,
// теперь уже 2
Константы
В программе можно явно записать величину – число, символ и т.п.
Например, мы можем записать выражение x + 4 – сложить текущее
значение переменной x и число 4. В зависимости от того, при каких
условиях мы будем выполнять программу, значение переменной x
может быть различным. Однако целое число четыре всегда останется
прежним. Это неизменяемая величина или константа.
Таким образом, явная запись значения в программе – это константа.
Далеко не всегда удобно записывать константы в тексте программы
явно. Гораздо чаще используются символические константы. Например,
если мы запишем
const int BITS_IN_WORD = 32;
Язык программирования C++Фридман А.Л.
15

то затем имя BITS_IN_WORD можно будет использовать вместо
целого числа 32.
Преимущества такого подхода очевидны. Во-первых, имя
BITS_IN_WORD (битов в машинном слове) дает хорошую подсказку,
для чего используется данное число. Без комментариев понятно, что
выражение
b / BITS_IN_WORD
(значение b разделить на число 32 ) вычисляет количество машинных
слов, необходимых для хранения b битов информации. Во-вторых, если
по каким-либо причинам нам надо изменить эту константу, потребуется
изменить только одно место в программе – определение константы,
оставив все случаи ее использования как есть. (Например, мы
переносим программу на компьютер с другой длиной машинного
слова.)
Язык программирования C++Фридман А.Л.
16

Операции и выражения
Правила формирования и вычисления выражений в языке Си++. Все
операции языка.
Выражения
Программа оперирует с данными. Числа можно складывать, вычитать,
умножать, делить. Из разных величин можно составлять выражения,
результат вычисления которых – новая величина. Приведем примеры
выражений:
X * 12 + Y // значение X умножить на 12 и к результату прибавить значение Y
val < 3 // сравнить значение val с 3
-9 // константное выражение -9
Выражение, после которого стоит точка с запятой – это операторвыражение. Его смысл состоит в том, что компьютер должен
выполнить все действия, записанные в данном выражении, иначе
говоря, вычислить выражение.
x + y – 12; // сложить значения x и y и затем вычесть 12
a = b + 1; // прибавить единицу к значению b и запомнить результат в переменной a
Выражения – это переменные, функции и константы, называемые
операндами, объединенные знаками операций. Операции могут быть
унарными – с одним операндом, например, минус; могут быть
бинарные – с двумя операндами, например сложение или деление. В
Си++ есть даже одна операция с тремя операндами – условное
выражение. Чуть позже мы приведем список всех операций языка Си++
для встроенных типов данных. Подробно каждая операция будет
разбираться при описании соответствующего типа данных. Кроме того,
ряд операций будет рассмотрен в разделе, посвященном определению
операторов для классов. Пока что мы ограничимся лишь общим
описанием способов записи выражений.
В типизированном языке, которым является Си++, у переменных и
констант есть определенный тип. Есть он и у результата выражения.
Например, операции сложения ( + ), умножения ( * ), вычитания ( - ) и
Язык программирования C++Фридман А.Л.
17

деления ( / ), примененные к целым числам, выполняются по
общепринятым математическим правилам и дают в результате целое
значение. Те же операции можно применить к вещественным числам и
получить вещественное значение.
Операции сравнения: больше ( > ), меньше ( < ), равно ( == ), не равно (
!= ) сравнивают значения чисел и выдают логическое значение: истина
( true ) или ложь ( false ).
Операция присваивания
Присваивание – это тоже операция, она является частью выражения.
Значение правого операнда присваивается левому операнду.
x = 2; // переменной x присвоить значение 2
cond = x < 2; // переменной cond присвоить значение true, если x меньше 2,
// в противном случае присвоить значение false
3 = 5; // ошибка, число 3 неспособно изменять свое значение
Последний пример иллюстрирует требование к левому операнду
операции присваивания. Он должен быть способен хранить и изменять
свое значение. Переменные, объявленные в программе, обладают
подобным свойством. В следующем фрагменте программы
int x = 0;
x = 3;
x = 4;
x = x + 1;
вначале объявляется переменная x с начальным значением 0. После
этого значение x изменяется на 3, 4 и затем 5. Опять-таки, обратим
внимание на последнюю строчку. При вычислении операции
присваивания сначала вычисляется правый операнд, а затем левый.
Когда вычисляется выражение x + 1, значение переменной x равно 4.
Поэтому значение выражения x + 1 равно 5. После вычисления
операции присваивания (или, проще говоря, после присваивания )
значение переменной x становится равным 5.
У операции присваивания тоже есть результат. Он равен значению
Язык программирования C++Фридман А.Л.
18

левого операнда. Таким образом, операция присваивания может
участвовать в более сложном выражении:
z = (x = y + 3);
В приведенном примере переменным x и z присваивается значение y
+ 3.
Очень часто в программе приходится значение переменной увеличивать
или уменьшать на единицу. Для того чтобы сделать эти действия
наиболее эффективными и удобными для использования, применяются
предусмотренные в Си++ специальные знаки операций: ++ (увеличить
на единицу) и -- (уменьшить на единицу). Существует две формы этих
операций: префиксная и постфиксная. Рассмотрим их на примерах.
int x = 0;
++x;
Значение x увеличивается на единицу и становится равным 1.
--x;
Значение x уменьшается на единицу и становится равным 0.
int y = ++x;
Значение x опять увеличивается на единицу. Результат операции ++ –
новое значение x, т.е. переменной y присваивается значение 1.
int z = x++;
Здесь используется постфиксная запись операции увеличения на
единицу. Значение переменной x до выполнения операции равно 1.
Сама операция та же – значение x увеличивается на единицу и
становится равным 2. Однако результат постфиксной операции – это
значение аргумента до увеличения. Таким образом, переменной z
присваивается значение 1. Аналогично, результатом постфиксной
операции уменьшения на единицу является начальное значение
операнда, а префиксной – его конечное значение.
Язык программирования C++Фридман А.Л.
19

Подобными мотивами оптимизации и сокращения записи
руководствовались создатели языка Си (а затем и Си++), когда вводили
новые знаки операций типа "выполнить операцию и присвоить".
Довольно часто одна и та же переменная используется в левой и правой
части операции присваивания, например:
x = x + 5;
y = y * 3;
z = z – (x + y);
В Си++ эти выражения можно записать короче:
x += 5;
y *= 3;
z -= x + y;
Т.е. запись oper= означает, что левый операнд вначале используется
как левый операнд операции oper, а затем как правый операнд
операции присваивания результата операции oper. Кроме краткости
выражения, такая запись облегчает оптимизацию программы
компилятором.
Все операции языка Си++
Наряду с общепринятыми арифметическими и логическими
операциями, в языке Си++ имеется набор операций для работы с
битами – поразрядные И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ и НЕ, а также
сдвиги.
Особняком стоит операция sizeof. Эта операция позволяет
определить, сколько памяти занимает то или иное значение. Например:
sizeof(long);
// сколько байтов занимает тип long
sizeof (b);
// сколько байтов занимает переменная b
Операция sizeof в качестве аргумента берет имя типа или
Язык программирования C++Фридман А.Л.
20
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
