Символ, который заключен в одинарные кавычки, является символьной константой. Часто константа, которая определяется таким образом, не занимает память. Там, где необходимо, ее значение может использоваться непосредственно. Константе следует инициализироваться при описании. Для переменных инициализация не всегда обязательна, но очень рекомендуется. Оснований для применения локальной переменной без ее инициализации очень немного.
К каждой комбинации данных типов могут применяться арифметические операции: + (плюс, унарный и бинарный), – (минус, унарный и бинарный), * (умножение), / (деление).
Кроме этого применяются операции сравнения: = (равно),!= (не равно), < (меньше), > (больше), <= (меньше или равно), >= (больше или равно).
При присваивании и арифметических операциях C++ осуществляет все осмысленные изменения между основными типами, чтобы их можно было сочетать без ограничений:
double d = 1; int i = 1; d = d + i; i = d + i;
Рассмотрим операции, которые создают из основных типов новые типы: * (указатель на), *const (константный указатель на), & (ссылка на), [] (вектор), () (функция, возвращающая).
У всех векторов нижней границей индекса является ноль, поэтому в v десять элементов: v[0]… v[9].
В предметном указателе могут быть адреса объекта соответствующего типа:
char c;
// …
p = &c // p указывает на c
Унарное & – операция взятия адреса.
23. Операции языка СИ++
C++ обладает богатым набором операций, которые позволяют в выражениях образовывать новые значения и изменять значения переменных. Поток управления в программе определяется с помощью операторов, а описания применяются для введения в программе имен переменных, констант и т. д. Описания служат операторами, поэтому они свободно могут сочетаться с другими операторами.
Необходимо учесть, что операции из таблицы 1 применяются к целым и что не существует отдельного типа данных для логических действий.
Таблица 1
Операции, применяемые к целым операндам
Смысл операции определяется числом операндов; унарное & – операция взятия адреса, а бинарное & – операция логического И.
Смысл операции определяется также типом ее операндов: + в выражении a + b означает сложение с плавающей точкой, если тип операндов float, но целое сложение, если их тип int.
В C++ существует операция присваивания =, а не оператор при-сваивания, как в некоторых языках. То есть присваивание может употребляться в неожиданном контексте; например, x = sqrt(a = 3*x).
Выражение a = b = c значит присвоение c объекту b, а потом объекту a. Другое свойство операции присваивания – она способна совмещаться с большинством бинарных операций. К примеру, x[i + 3]* = 4 имеет значение x[i + 3] = x[i + 3]*4, за исключением того, что выражение x[i + 3] определяется только один раз. Это дает большую степень эффективности без необходимости употребления оптимизирующего компилятора. К тому же это менее длинно.
Во многих программах на C++ широко используются указатели.
Унарная операция * разыменовывает указатель, т. е. *p представляет собой объект, на который указывает p. Данная операция также именуется косвенной адресацией. Например, если имеется char* p, то *p – это символ, на который указывает p. Часто при работе с указателями применяются операция увеличения ++ и операция уменьшения —.
24. Оператор выражение. Пустой оператор
Самый простой вид оператора – оператор выражение. Он включает в себя выражение, за которым следует точка с запятой.
К примеру:
a = b*3 + c;
cout << «go go go»; lseek(fd,0,2); Простейший оператор – пустой оператор:
Он не делает ничего. Но он используется тогда, когда синтаксис требует присутствия оператора, а данный оператор не нужен.
Блок представляет собой возможно пустой список операторов, находящихся в фигурных скобках:
{a = b + 2; b++;}
Блок дает возможность рассматривать несколько операторов как один. Область видимости имени, которая описана в блоке, простирается до конца блока. Имя может быть невидимым с помощью описаний такого же имени во внутренних блоках.
Программа в следующем примере производит преобразование дюймов в сантиметры и сантиметров в дюймы; предполагается, что указаны единицы измерения вводимых данных, добавляется i для дюймов и c для сантиметров:
#include main()
const float fac = 2.54; float x, in, cm; char ch = 0;
cout << «введите длину: «; cin>> x >> ch;
if (ch == { // inch – дюймы
in = x;
cm = x*fac;
}
else if (ch == 'c') // cm – сантиметры in = x/fac; cm = x;
}
else
in = cm = 0;
cout << in << «in=» << cm << «cm »;}
25. Оператор switch, break. Копирование строки
Оператор switch дает возможность сопоставления значения с множеством констант. Проверки в предыдущем примере можно представить в следующем виде:
switch (ch) {
case
in = x;
cm = x*fac;
break;
case 'c':
in = x/fac;
cm = x;
break;
default:
in = cm = 0;
break;
}
Операторы break используются для выхода из оператора switch. Константы в вариантах case могут иметь различные значения, и если проверяемое значение не совпадает ни с одной из констант, принимается вариант default. Программист не обязательно должен предусматривать default.
Покажем копирование строки, когда заданы указатель p на ее первый символ и указатель q на целевую строку. По соглашению строка заканчивается символом с целым значением 0.
while (p!= 0) {
*q = *p; // скопировать символ q = q+1;
p = p+1;