Форум программистов, компьютерный форум CyberForum.ru

Перечисляемый тип - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Нужно задать цикл, чтобы сортировка выполнялась 1000 раз http://www.cyberforum.ru/cpp-beginners/thread787674.html
Нужно задать цикл для сортировки,чтобы она выполнялась 1000 раз, и в итоге в текстовый файл выводились 1000 результов по времени сортировки массива. #include "stdafx.h" #include <algorithm> #include <iostream> #include <fstream> #include <cstdio> #include <cstdlib> #include <cassert> #include <climits>
C++ Подсчитать в символьной строке количество букв Помогите, пожалуйста, написать программу!!! Дана символьная строка. Нужно подсчитать количество малых букв http://www.cyberforum.ru/cpp-beginners/thread787673.html
Как получить дробную часть числа с плавающей точкой? C++
Допустим, перед тем как вызвать функцию факториала, мне необходимо совершить проверку аргументов. Чтобы проверить, целое ли число, мне нужно проверить дробную часть и сравнить с нулем, так ведь? я не могу найти функцию, которая бы это совершить.
C++ Получить гамельтонов граф
Дан неориентированный невзвешанный граф. Требуется удалить минимальное количество ребер/вершин, чтобы он стал гамельтоновым. Есть идеи?
C++ Указатели на структуры http://www.cyberforum.ru/cpp-beginners/thread787650.html
Подскажите в чем ошибка...Дело в том когда я в вожу в каждое поле по 1 значению все нормально выводит,но если при в вводе в поле я пишу два значения через пробел,то он захватывает у меня следующую строку. Nazvanie:10 10; vidtovaraadress Вот такая штука... #include "stdafx.h" #include <iostream> #include <conio.h> using namespace std;
C++ Как начать работать в Visual C++ 2010 Здравствуйте. Никак не могу понять как нужно работать в Visual C++ 2010. Я только начинающий. Делаю следующее. Создаю проект: «Файл» → «Создать» → «Проект». В «Установленных шаблонах» выбираю «Общие» → «Пустой проект». Затем пишу имя проекта; нажимаю «ОК». Создаю файл: «Проект». В «Установленных шаблонах» выбираю «Добавить новый элемент». Затем: «Код» → «Файл С++ (.срр) Затем, пишу имя... подробнее

Показать сообщение отдельно
AndreyD93
17 / 17 / 1
Регистрация: 13.11.2012
Сообщений: 154
16.02.2013, 19:24     Перечисляемый тип
Вчера была лекция по этому типу данных!! Вот она, может поможет чем-то!!



VT_NONE – тип переменной не определен;
VT_INT – целочисленный тип;
VT_FLOAT – вещественный тип;
VT_CHAR – символьный тип.

Этого можно достичь, если type_var определить как перечисляемый тип, который задается с помощью ключевого слова enum следующим образом:

C++
1
enum tag_type {VT_NONE, VT_INT, VT_FLOAT, VT_CHAR};
При этом объявление перечисляемого типа выполняется подобно объявлению структуры или объединения:

C++
1
enum tag_type type_var;
В результате для введенной переменной перечисляемого типа допустимо использование следующих операторов:

C++
1
2
3
type_var = VT_INT; //переменная type_var принимает значение VT_INT 
if(type_var == VT_NONE) // проверка 
for(type_var = VT_NONE; type_var <= VT_CHAR; type_var++)     //цикл
Анализ последнего оператора for показывает, что значения перечисляемого типа VT_NONE,…,VT_CHAR являются числами, которые имеют свои имена. Причем, VT_NONE = 0, VT_INT = 1, …, VT_CHAR = 3. В некоторых случаях использование имен удобнее использования цифр, т.к. их запоминать и ориентироваться в них проще, чем в числах.

Перепишем пример хранения разнородной информации с использованием перечисляемого типа, получим:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
enum tag_type {VT_NONE, VT_INT, VT_FLOAT, VT_CHAR}; 
struct tag_var { 
union tag_value value; 
enum tag_type type_var; 
}; 
int main() 
{ 
struct tag_var var[3]; 
var[0].type_var = VT_INT; 
var[0].value.var_i = 10; 
var[1].type_var = VT_FLOAT; 
var[1].value.var_f = 2.3; 
var[2].type_var = VT_CHAR; 
var[2].value.var_ch = ‘d’; 
for(int i = 0;i < 3;i++) 
{ 
switch(var[i].type_var) 
{ 
case VT_INT:printf(“var=%d\n”,var[i].value.var_i);break; 
case VT_FLOAT:printf(“var=%f\n”,var[i].value.var_f);break; 
case VT_CHAR:printf(“var=%c\n”,var[i].value.var_ch);break; 
default: printf(“Значение переменной не определено\n”); 
} 
} 
return 0; 
}
Из приведенного примера видно, что использование перечисляемого типа делает программу более понятной и удобной при программировании. Здесь следует отметить, что если объявлены два перечисления

C++
1
2
enum color {red, green, blue} clr; 
enum color_type {clr_red, clr_green, clr_blue} type;
то числовые значения red, green, blue будут совпадать с соответствующими числовыми значениями vt_int, vt_float, vt_char. Это значит, что программный код if(clr == red) будет работать также как и if(clr == clr_red). Часто это не имеет принципиального значения, но, например, следующий оператор выдаст сообщение об ошибке:

C++
1
2
3
4
5
6
switch(clr) 
{ 
case red:printf(“Красный цвет\n”);break; 
case green:printf(“Зеленый цвет\n”);break; 
case clr_red:printf(“Красный оттенок\n”);break; 
};
Ошибка возникнет из-за того, что значение red и значение clr_red равны одному числу – 0, а оператор switch не допускает такой ситуации. Для того чтобы избежать такой ситуации, при задании перечисляемого типа допускаются следующие варианты:

C++
1
2
3
enum color_type {clr_red = 10, clr_green, clr_blue}; 
enum color_type {clr_red = 10, clr_green = 20, clr_blue = 30}; 
enum color_type {clr_red, clr_green = 20, clr_blue};
В первом случае значения clr_red = 10, clr_green = 11, clr_blue = 12. Во втором - clr_red = 10, clr_green = 20, clr_blue = 30. В третьем - clr_red = 0, clr_green = 20, clr_blue = 21. Как видно из полученных значений, величины могут инициализироваться при задании перечисления, а если они не объявлены, то принимают значение на единицу больше предыдущего значения.
 
Текущее время: 18:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru