ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 4) онлайн
Пример карточной игры
Рассмотрим еще один, последний, пример использования перечисляемых типов данных. Вспомним, что в программе CARDS, созданной нами, использовалась груп- па констант типа const int, предназначенных для представления карточных мастей:
const int clubs = 0; const int diamonds = 1; const int hearts = 2; const int spades = 3;
Такой способ задания констант, как можно видеть, не отличается изящно- стью. Давайте перепишем код программы CARDS, используя перечисления.
// cardenum.cpp
// карточная игра с использованием перечислений
#include <iostream>
using namespace std;
const int jack = 11; // именованные достоинства карт
const int queen = 12;
const int king = 13;
const int ace = 14;
enum Suit { clubs, diamonds, hearts, spades };
//////////////////////////////////////////////////////////
struct card
{
int number; // достоинство карты
Suit suit; // масть
};
//////////////////////////////////////////////////////////
int main()
{
card temp, chosen, prize; // определение карт
int position;
card card1 = { 7, clubs }; // инициализация card1
cout << "Карта 1: 7 треф\n";
card card2 = { jack, hearts }; // инициализация card2
cout << "Карта 2: валет червей\n";
card card3 = { ace, spades }; // инициализация card3
cout << "Карта 3: туз пик\n";
prize = card3; // запоминаем карту 3
cout << "Меняем местами карту 1 и карту 3\n";
temp = card3; card3 = card1; card1 = temp;
cout << "Меняем местами карту 2 и карту 3\n";
temp = card3; card3 = card2; card2 = temp;
cout << "Меняем местами карту 1 и карту 2\n";
temp = card2; card2 = card1; card1 = temp;
cout << "На какой позиции (1,2 или 3) теперь туз пик? ";
cin >> position;
switch (position)
{
case 1: chosen = card1; break;
case 2: chosen = card2; break;
case 3: chosen = card3; break;
}
if( chosen.number == prize.number && // сравнение карт
chosen.suit == prize.suit)
cout << "Правильно! Вы выиграли!\n";
else
cout << "Неверно. Вы проиграли.\n ";
return 0;
}
Мы заменили серию констант, обозначающих масти, на перечисляемый тип:
enum Suit { clubs, diamonds, hearts, spades };
Такой подход упрощает использование констант, поскольку нам известны все возможные значения мастей, и попытка использования некорректного зна- чения, например
card1.suit = 5;
вызовет предупреждающее сообщение от компилятора.
Задание целых значений для перечисляемых констант
Как мы говорили, первой из перечисляемых констант соответствует целое значе- ние, равное 0, второй — значение, равное 1, и т. д. Для того чтобы изменить зна- чение, с которого начинается нумерация, можно с помощью операции присваи- вания задать это значение первой из перечисляемых констант:
enum Suit { clubs = 1, diamonds, hearts, spades };
В этом случае следующим по списку константам будут соответствовать чис- ла 2, 3 и 4 соответственно. Фактически мы можем изменить величину целого числа, соответствующего любому элементу списка, применив к нему операцию присваивания, как это было показано выше.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
Схожі підручники
- Соціальна педагогіка (частина 1)
- Конспект лекцій з курсу Введення у фінансову діяльність (частина 1)
- Сила воли. Как развить и укрепить (онлайн)
- Страхові послуги (частина 1)
- Товарознавство харчових продуктів функціонального призначення. Навчальний посібник (частина 1)
- ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 9) онлайн
