Sportscar имеет больше дверей, чем Motorbike? Yes




Sportscar имеет больше дверей, чем Sedan? No

*/

 

 

Пример 10.2. Применение метода Format для форматирования значений элементов перечисления.

 

#include "stdafx.h"

using namespace System;

enum class Colors { Red, Green, Blue, Yellow };

int main() {

Colors myColor = Colors::Blue;

Console::WriteLine("Мой любимый цвет – {0}.", myColor);

Console::WriteLine("Десятичное значение цвета – {0}.",

Enum::Format(Colors::typeid, myColor, "d"));

Console::WriteLine("Шестнадцатеричное значение цвета – {0}.",

Enum::Format(Colors::typeid, myColor, "x"));

Console::ReadLine();

return 0;

}

/* Вывод:

Мой любимый цвет – Blue.

Десятичное значение цвета – 2.

Шестнадцатеричное значение цвета – 00000002.

*/

 

Пример 10.3. Использование методов GetName, GetNames, GetValues и IsDefined для работы с перечислениями.

 

#include "stdafx.h"

using namespace System;

enum class Colors { Red, Green, Blue, Yellow };

int main() {

Console::Write("Элементы перечисления Colors: ");

for each (String^ st in Enum::GetNames(Colors::typeid))

Console::Write(" {0} ", st);

Console::WriteLine(".");

Console::Write("Значения элементов перечисления Colors: ");

For each (int i in Enum::GetValues(Colors::typeid))

Console::Write(" {0} ", i);

Console::WriteLine(".");

Console::WriteLine("2-й элемент перечисления Colors – {0}.",

Enum::GetName(Colors::typeid, 1));

Colors value = Colors::Blue;

Console::WriteLine("{0:D} содержится в перечислении Colors? {1}.",

value, Enum::IsDefined(Colors::typeid, value));

Console::WriteLine("{0} содержится в перечислении Colors? {1}.",

value, Enum::IsDefined(Colors::typeid, value));

Console::ReadLine();

return 0;

}

/* Вывод:

Элементы перечисления Colors: Red Green Blue Yellow.

Значения элементов перечисления Colors: 0 1 2 3.

Й элемент перечисления Colors – Green.

Содержится в перечислении Colors? True.

Blue содержится в перечислении Colors? True.

*/

 

 

Перечисления с битовыми флагами

(https://msdn.microsoft.com/ru-ru/library/system.flagsattribute.aspx)

 

Пример 10.4. Определение другой версии перечисления Days, имеющей имя Days2. В Days2 имеется атрибут FlagsAttribute и каждому элементу присваивается следующая степень числа 2. При создании переменной типа перечисления Days2 она получает значение Days2::.Tuesday и Days2::Thursday. Для установки флагов в перечислении, проверки факта установки конкретного флага и удаления флага используются побитовые операторы OR, XOR и AND.

 

#include "stdafx.h"

using namespace System;

[FlagsAttribute]

enum class Days2: char {

None = 0x0, // Флаги не установлены

Sunday = 0x1,

Monday = 0x2,

Tuesday = 0x4,

Wednesday = 0x8,

Thursday = 0x10,

Friday = 0x20,

Saturday = 0x40

};

int main() {

// Объявление и инициализация переменной двумя флагами

// с помощью поразрядного ИЛИ (OR).

Days2 meetingDays = Days2::Tuesday | Days2::Thursday;

Console::WriteLine("Дни встреч – {0}.", meetingDays);

// Вывод: Дни встреч – Tuesday, Thursday.

// Установка дополнительного флага с помощью

// поразрядного ИЛИ (OR).

meetingDays = meetingDays | Days2::Friday;

Console::WriteLine("Дни встреч – {0}.", meetingDays);

// Вывод: Дни встреч – Tuesday, Thursday, Friday.

// Удаление флага с помощью поразрядного исключающего ИЛИ (XOR).

meetingDays = meetingDays ^ Days2::Tuesday;

Console::WriteLine("Дни встреч – {0}.", meetingDays);

// Вывод: Дни встреч – Thursday, Friday.

// Проверка значений флагов с помощью поразрядного И (AND).

bool test = (meetingDays & Days2::Thursday) == Days2::Thursday;

Console::WriteLine("Thursday {0} – день встречи.",

test == true? "": "не");

// Вывод: Thursday – день встречи.

Console::ReadLine();

return 0;

}

 

 

Пример 10.5. Использование метода FlagsAttribute.

 

#include "stdafx.h"

using namespace System;

// Определение перечисления без битовых флагов (FlagsAttribute).

public enum class SingleHue: char {

None = 0,

Black = 1,

Red = 2,

Green = 4,

Blue = 8

};

// Определение перечисления с битовыми флагами (FlagsAttribute).

[FlagsAttribute]

enum class MultiHue: char {

None = 0,

Black = 1,

Red = 2,

Green = 4,

Blue = 8

};

int main() {

// Отображение всех возможных комбинаций значений.

Console::WriteLine("Все возможные комбинации значений " +

"без битовых флагов (FlagsAttribute):");

for (int val = 0; val <= 16; val++)

Console::WriteLine("{0,3} - {1:G}", val, (SingleHue)val);

// Отображение всех комбинаций значений и недопустимых значений.

Console::WriteLine("\nВсе возможные комбинации значений " +

"с битовыми флагами (FlagsAttribute):");

for (int val = 0; val <= 16; val++)

Console::WriteLine("{0,3} - {1:G}", val, (MultiHue)val);

Console::ReadLine();

return 0;

}

/* Вывод:

Все возможные комбинации значений без битовых флагов (FlagsAttribute):

None

Black

Red

3 - 3

Green

5 - 5

6 - 6

7 - 7

Blue

9 - 9

10 - 10

11 - 11

12 - 12

13 - 13

14 - 14

15 - 15

16 - 16

Все возможные комбинации значений c битовыми флагами (FlagsAttribute):

None

Black

Red

Black, Red

Green

Black, Green

Red, Green

Black, Red, Green

Blue

Black, Blue

Red, Blue

Black, Red, Blue

Green, Blue

Black, Green, Blue

Red, Green, Blue

Black, Red, Green, Blue

16 – 16

*/

 

Пример 10.6. Использование перечислений для представления именованных значений и битовых полей (флагов).

 

#include "stdafx.h"

using namespace System;

enum class Days {



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-11-19 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: