Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

В с++ есть перечисление (enum), мне оно нужно для структуры данных, как сделать, чтобы вывелось значение, а не номер?

hehehe hahaha Ученик (65), открыт 11 часов назад
При выводе он даёт цифру(номер, на котором стоит выбранный элемент в enum).

Как сделать, чтобы он выдал не 6, а то, что стоит на 6 месте?
3 ответа
Кто то Профи (556) 11 часов назад
Отрезать яйца, но можно и переопределить оператор вывода для этого типа данных
hehehe hahahaУченик (65) 11 часов назад
как?)
Андрей Высший разум (465420) 11 часов назад
Никак. Тип enum - это набор констант для удобства написания кода. Твоё morskaya_svinka - НЕ строка, которую можно вывести, а имя константы имеющей значение 6. И это имя (так же, как имя переменной moy) существует только в исходном коде программы и использоваться может только для подстановки числа 6 в выражения.

Хочешь выводить строку по коду - придётся вручную прописать соответствия
код->название в структуре вида: map<int, string>.
 map<TipJivotnogo, wstring> type_name{
{TipJivotnogo::Koshka, L"Кошка"},
{TipJivotnogo::Sobaka, L"Собака"},
{TipJivotnogo::Ribka, L"Рыбка"},
{TipJivotnogo::Popygai, L"Попугай"},
...
};
...
wcout << type_name[moy.tip];

P.S. Фактически, enum является просто более короткой записью последовательно нумерованных констант:
 const int Koshka = 0;
const int Sobaka = 1;
const int Ribka = 2;
const int Popygai = 3;
...
Николай Веселуха Высший разум (370648) 11 часов назад
 #include <iostream> 
#include <string>
#include <vector>

using namespace std;

class Animals {
public:
enum class Animal {
НеизвестноеЖивотное,
Кошка,
Собака,
Рыбка,
Попугай,
Кролик,
Хомяк,
МорскаяСвинка
};
protected:
inline static const vector<string> animals{
"неизвестное животное",
"кошка",
"собака",
"рыбка",
"попугай",
"кролик",
"хомяк",
"морская свинка"
};
};

struct Pet : public Animals {
string name{ "Безымянное" };
Animals::Animal animal{ Animal::НеизвестноеЖивотное };
private:
static friend ostream& operator<<(ostream& out, const Pet& pet) {
return out << pet.name << " - " << Pet::animals[size_t(pet.animal)];
}
};

int main() {
system("chcp 1251 > nul");
Pet guinea_pig;
cout << guinea_pig << '\n';
guinea_pig.name = "Жорик";
guinea_pig.animal = Animals::Animal::МорскаяСвинка;
cout << guinea_pig << '\n';
system("pause > nul");
}
Похожие вопросы