Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
mL_3_Osn_tip_07.doc
Скачиваний:
3
Добавлен:
29.04.2019
Размер:
154.62 Кб
Скачать

Именованные константы

Константы – это фиксированное числовое или символьное значение. Но в языке С++ имеется несколько возможностей задавать константы с помощью имен, именованные константы.

1. Первый способ  – использование квалификатора типа  const :

const тип имя_константы = значение_константы;

Например: const a=100; const char ADC=’c’; const double R=2.718281828;

Если тип константы не задан, то компилятор определяет его по внешнему виду значения.

При определении с помощью слова  const  под имя_константы память выделяется, и значение_константы изменить нельзя.

2. Вторая возможность  – использование директиву препроцессора  #define :

#define имя_константы значение_константы

На этапе работы препроцессора все включенные имена_константы будут изменены на значение_константы.

Например: #define R 5634

#define PI 3.1415

При использовании директивы  #define  замена осуществляется на этапе работы препроцессора, память под имя_константы не выделяется, значение_константы можно переопределить, используя повторную директиву  #define . При этом директивой  #undef  при этом можно не пользоваться:

#define a 5 #define b 7

или #undef b

#define a 6 #define b 8

3. Целые константы можно также вводить с помощью перечисления :

enum имя_перечисления {имя_константы=значение, имя_константа=значение,…};

где enumключевое слово;

имя_перечисления – произвольный идентификатор, необязателен и имеет права типа;

имя_константы – идентификатор, которому можно присвоить некоторое значение.

Если значение отсутствует, то первому элементу по умолчанию присваивается значение 0, не первому элементу присваивается значение на 1 больше, чем предыдущему.

Например:

enum {a, b=3, g}; // Получим a=0, b=3, g=4.

int ch=g; // Получим ch=4

enum name {Petrov=19, Sidorov, Ivanov};

name age=Sidorov; // age=20

Имена констант должны быть уникальными, но их значения могут повторяться.

Например:

enum {zero,nought=0,one,two,paiz=2,tree};

Получим zero=0, nought=0, one=1, two=2, paiz=2, tree=3.

Преобразование типов Преобразования при вычислении выражений

При выполнении операций производится автоматическое преобразование типов, чтобы привести операнды выражений к общему типу. Однако можно отметить, что при вычислении выражений операнды преобразуются к типу того операнда, который имеет наибольший размер.

Рассмотрим общие арифметические преобразования. Эти правила используются по порядку.

  1. В арифметических выражениях операнды типа  char ,  unsigned char ,  short ,  unsigned short  преобразуются к типу  int  или к  unsigned int .

  2. Иначе если один операнд имеет тип long double, то второй преобразуется к long double.

  3. Иначе если один операнд double, то второй также преобразуется к типу double.

  4. Иначе если один операнд float, то второй также преобразуется к типу float.

  5. Иначе если один операнд типа unsigned long, то второй преобразуется к типу unsigned long.

  6. Иначе если один операнд типа long, а второй unsigned int, то, если все значения unsigned int может представить тип long, то он преобразуется к типу long, иначе оба преобразуются в тип unsigned long.

  7. Иначе если один операнд типа long, то второй преобразуется к типу long.

  8. Иначе если один операнд типа unsigned int, то второй операнд преобразуется к типу unsigned int.

  9. Иначе оба операнда типа int.

Пример:

double sd; float ft=2.0f;

char c1=’(‘, c2=’)’, c3; // 40 41,c1 и c2 преобразуется к типу int (87).

unsigned long k=2L;

int i=73;

c3=c1+c2+6; //87==’W’, c1 и c2 преобразуется к типу int (87).

sd=ft*(i-c3/k);

В выражении c3/k преобразуется к типу unsigned long (43). Затем операнд i в выражении (i+c3/k) преобразуется к типу unsigned long (20), а все выражение преобразуется к типу float (40.0). Результат всего выражения будет иметь тип double.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]