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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
DmitryM5
Love~
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 784
Записей в блоге: 1
#1

Перечислимый тип enum ,что это? - C++

22.09.2013, 13:15. Просмотров 475. Ответов 3
Метки нет (Все метки)

Не пойму зачем он нужен,если все равно он возвращает целые числа?
Как обращаться именно к имени(string) элемента типа enum?К примеру вывести имя из enum.Не помогает даже cast ...
В моем понимании,будто бы это просто воображение,и я представляю,что 1-это первый элемент(имя у меня в голове),2-это второй элемент (имя у меня в голове)...ит.д.
Кто нибудь объясните на примере моей задачи,вывод пришлось делать,хотя думал проще можно вывести....:

Единицы длины пронумерованы следующим образом: 1 — дециметр, 2 — километр, 3 — метр, 4 — миллиметр, 5 — сантиметр. Дан номер единицы длины (целое число в диапазоне 1–5) и длина отрезка в этих единицах (вещественное число). Найти длину отрезка в метрах.
Указание: используйте в решении перечисление для единиц длины.

part4.h:
C++
1
2
3
4
5
6
#ifndef PART4_H
#define PART4_H
enum  dlina{dc=1,km,m,mm,sm};
void printdlina(int i);
double find(int i,double v);
#endif /*PART4_H*/
Task6.cpp:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/
#include <iostream>
#include <locale>
#include "part4.h"
 
using namespace std;
void printdlina(int i) {
     switch(i) {
     case 1: {
         cout<<"Дециметр"<<endl;
         break;
     }
     case 2: {
         cout<<"Километр"<<endl;
         break;
     }
     case 3: {
         cout<<"Метр"<<endl;
         break;
     }
      case 4: {
         cout<<"Миллиметр"<<endl;
         break;
    }
    
     }
}
 
 
double find(int i,double v) {
    if ( (i<1)||(i>5) ) {
        throw std::range_error("number of day should be in a range [1, 5]");
    }
     dlina a=static_cast<dlina>(i); 
 
     switch(a) {
     case 1: 
         return v/10;
     case 2: 
         return v*1000;
     case 3: 
         return v;
     case 4: 
         return v/1000;
     case 5:
         return v/100;
     }
}
main4.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <locale>
#include "part4.h"
 
using namespace std;
 
int main() {
    std::locale::global(std::locale(""));
    int i;
    double v;
    cout<<"Введите номер единицы длины (1-5) и значение этой длины "<<endl;
    cin>>i>>v;
    cout<<"Исходная длина ";
    printdlina(i);
    cout<<" Значение = "<<v;
    cout<<" После перевода в метры значение  = "<<find(i,v)<<endl;
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2013, 13:15     Перечислимый тип enum ,что это?
Посмотрите здесь:

перечислимый тип C++
Заголовочный файл и тип enum C++
C++ Известны углы α и β у основания. Выяснить, если это возможно, тип трапеции
C++ что за тип unsigned?
Что такое enum и как им пользоваться C++
std::vector<int> Что это за тип данных? C++
Скажите пожалуйста, что это за тип данных?! C++
Как результат функции конвертировать в тип Enum? C++
Как сделать тип enum в структуре беззнаковым C++
Тип enum и нумерация C++
Культура оформления кода: что такое enum? Где, когда и для чего уместно применять этот тип? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
22.09.2013, 14:07     Перечислимый тип enum ,что это? #2
Цитата Сообщение от DmitryM5 Посмотреть сообщение
Не пойму зачем он нужен,если все равно он возвращает целые числа?
Чтобы давать целым числам имена.

Цитата Сообщение от DmitryM5 Посмотреть сообщение
Как обращаться именно к имени(string) элемента типа enum?
Именно так, как вы сделали: руками. Есть варианты с массивами и std::map.

enum сделан таким костылём ради (очередной) совместимости с Си.
DmitryM5
Love~
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 784
Записей в блоге: 1
22.09.2013, 14:18  [ТС]     Перечислимый тип enum ,что это? #3
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
Чтобы давать целым числам имена.

Именно так, как вы сделали: руками. Есть варианты с массивами и std::map.

enum сделан таким костылём ради (очередной) совместимости с Си.
Ну я фактически не обращался к именам dc,km,mm,m,sm.?
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
22.09.2013, 15:52     Перечислимый тип enum ,что это? #4
Это имена констант для компилятора. Вы точно так же не можете взять и получить имя переменной в виде строки.
Yandex
Объявления
22.09.2013, 15:52     Перечислимый тип enum ,что это?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru