Какая область видимости константы, объявленной в перечислении?



Константа, объявленная в перечислении, имеет область видимости в пределах скобок, в которых объявляется шаблон (тип) перечисления.

Например.

Дано перечисление NUMBERS, в котором объявлены 3 константы с именами num1, num2, num3. Если в этом же блоке операторных скобок { } объявить переменную с именем num2

... { // область видимости имен num1, num2, num3 enum NUMBERS {   num1 = 15,   num2 = 77,   num3 = -1232 }; // попытка объявить имя num2 int num2 = 122; // ошибка!!!}

то компилятор выдаст ошибку

Error: 'num2' : redefinition; previous definition was 'enumerator'

7. Объединения.

Тип объединение описывает набор данных, которые называются элементами или членами объединения. Объединение позволяет хранить в одной и той же области памяти значения различных типов, которые соответствуют типам элементов объединения. Но в каждый данный момент времени в этой области памяти может храниться только одно значение. Отсюда следует, что длина памяти, распределяемой компилятором под объединение, равна наибольшей из длин членов этого объединения. Как и в случае структуры, члены объединения могут иметь любой тип за исключением типов void и функция.

Объявляются объединения следующим образом:

union num

{

int n;

double f;

};

где union – это ключевое слово, num – имя типа объединения, n, f – члены объединения.

Переменная типа объединение объявляется следующим образом:

union num d; // объявление переменной d, которая имеет тип num (язык С)

num d; // объявление переменной d, которая имеет тип num (язык С++)

и также называется объединением. Объявление типа объединения и переменной, которая имеет этот тип, может быть объединено в одну инструкцию. Например,

union num

{

int n;

double f;

} d; // d – переменная типа num

При объявлении переменной типа объединение её можно инициализировать значением, которое должно иметь тип первого члена объединения. Например,

union num d = { 1 }; // правильно, d = 1

union num d = { 1.0 }; // ошибка

Как и в случае со структурами, для доступа к элементу объединения используется оператор точка ‘.’. Например,

union num e, g;

e.n = 1;

e.f = 1.1;

Объединения одного типа можно присваивать друг другу. В этом случае оператор присваивания выполняет по членное копирование объединений. Например,

union num e, g;

e = g;

Также как и структуры объединения нельзя сравнивать.

8.

 

9. Объявление типа перечисления с использованием средства typedef. Общая форма. Пример

Перечисление можно также объявлять с использованием ключевого слова typedef. В этом случае общая форма такого объявления следующая

typedef enum TypeName {

// перечень констант и константных значений

// ...

};

здесь TypeName – имя нового типа перечисления, которое создается.

Пример. С помощью ключевого слова typedef объявляется тип TDAYS, который есть перечислением. Затем объявляется переменная типа TDAYS.

// объявить новый тип TDAYS, который есть тип-перечисление

typedef enum TDAYS {

Sun = 1, Mon, Tue, Wed, Thu, Fri, Sat

};

// объявить переменную типа TDAYS

TDAYS td;

// присвоить переменной td значение из набора типа TDAYS

td = TDAYS::Sun;

 


Дата добавления: 2021-07-19; просмотров: 56; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!