- •Лексические элементы языка
- •Соглашение об именах
- •Понятие типа данных
- •Определение переменных
- •Правило видимости (scope rules)
- •Классификация типов данных
- •Характеристики базовых типов данных
- •Константные величины
- •Числовые константы
- •Правила определения компилятором констант таковы:
- •Перечислимые константы
- •Символьные (литерные) константы
- •Строковые константы
- •Именованные (символические) константы
- •Преобразования типов Неявные преобразования.
- •Явные преобразования.
- •Примеры явного приведения типов:
- •Пример неявного преобразования типов
- •Процедура подготовки исполняемой программы
- •Пользовательских символических констант
- •Обращение к функциям
Именованные (символические) константы
Часто в программах встречаются константы, которым имеет смысл дать имя. Такие константы называются символическими.
Символические константы базовых типов определяются так же как и переменные соответствующих типов, но с указанием модификатора const.
Примеры оопределения символических констант:
const int x = 5;
const double z = 1E-5;
const float PI = 3.141593;
const char Smb = ‘t’;
Символические константы можно задавать (но не рекомендуется) средствами препроцессора.
Например: #define BT “Buenos tardes, amigos” // Определение символической строковой константы
#define PI 3.141593 // Определение символической числовой константы
Другой способ задания символических целочисленных констант – использование типа enum.
Например, в результате такого объявления
еnum { OK, NO_OPEN, NO_CREATE, FALL = 5 };
мы получим константы с указанными в списке именами и со значениями 0, 1, 2 и 5 соответственно.
Преобразования типов Неявные преобразования.
Операнды в выражениях можно смешивать. При этом выполняются неявные (по умолчанию) преобразования данных, а именно:
-
если один из операндов – вещественный, то другие преобразуются к вещественному типу;
-
если операнды имеют разный диапазон представления, то они преобразуются к большему диапазону;
-
если смешиваются типы char, short, unsigned char, unsigned short и enum ( в любых сочетаниях ) и если их значения могут быть представлены как int, то все они преобразуются в int; иначе – в unsigned int;
-
если операнды – целые и один из них имеет тип unsigned long, то остальные преобразуются к этому типу;
-
если один операнд имеет тип long int, а остальные – unsigned int и если long int может представить все значения unsigned int, то unsigned int преобразуется в long; иначе оба операнда преобразуются к типу unsigned long.
Неявные преобразования преследуют цель избежать потерь и искажения данных, однако программисту не следует полагаться на них целиком.
Явные преобразования.
Преобразования данных можно выполнять и явно, используя так называемое функциональное преобразование.
Постфиксная операция приведения типа:
type (выражение)
cлужит для формирования значений типа type на основе выражения, помещенного в круглых скобках.
Префиксная операция преобразования типа:
(type) выражение
Примеры явного приведения типов:
i = i + (int)3.14; // вначале 3.14 преобразуется к типу int
i = i + int(3.14);
int count=1066, total=1337;
double ratio;
ratio = double(count) / total; // здесь целое count преобразуется к типу double
Пример неявного преобразования типов
Пусть определены переменные следующих типов:
char ch;
int i;
float f;
double d;
long double r;
Тогда при вычислении выражения (см. ниже) произойдут следующие автоматические преобразования типов:
r = ch * 2 + (i – 0.5) + (f + d) - 7
char int int double float double int
int int double double double double
int double double
Далее дорисовать самостоятельно!
double double
double
double double
double
double double
double
long double
Стандартом С++ описываются 4 специальных оператора, предназначенные для приведения типов (преобразования выражения из одного типа в другой): static_cast < тип > ( выражение ) Преобразует выражение к указанному типу, без каких-либо проверок во время выполнения программы. В MSDN рекомендуется использовать этот оператор для приведения числовых типов - например, из enum или int в float Пример:
reinterpret_cast < тип > ( выражение ) Позволяет преобразовать выражение, являющееся указателем любого типа, к указанному типу (являющемуся также указателем любого типа, либо числовым типом - int, long). Чаще всего используется для приведения указателя на один тип к указателю на другой тип без необходимости промежуточного преобразования к void*. Пример:
|