0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 40
1

Класс игральная карта

29.05.2013, 08:30. Показов 5155. Ответов 40
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите описать класс карта нужно описать ее масть и номер с двумя конструкторами, один обязательно с параметрами, помогите нужно сделать к завтрашней паре, а да еще конструктор должен обязательно задействован, и пожалуйста с переменными флоат если это возможно, но не со строками..
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.05.2013, 08:30
Ответы с готовыми решениями:

Создать класс карта
Помогите пожалуйста! Создать класс карта, содержащий в качестве параметров ранг и масть. Карту...

Создать класс карта по условию
Доброго времени суток ув. форумчане. Попалась следующая задача, код к реализации программы есть, но...

Игральная кость
Игральную кость бросают 8 раз. Найти вероятность того, что шестёрка появится хотя бы один раз.

Игральная кость
Игральную кость подбросили 4 раза,какова вероятность того что выпадет четное число?

40
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.05.2013, 08:43 2
Цитата Сообщение от Karata Посмотреть сообщение
с переменными флоат если это возможно
А что в игральной карте может описываться вещественной переменной? Толщина материала, из которого она сделана?
1
4768 / 2578 / 892
Регистрация: 29.11.2010
Сообщений: 5,576
29.05.2013, 10:12 3
Цитата Сообщение от Karata Посмотреть сообщение
и пожалуйста с переменными флоат если это возможно
Бессмысленно. Попробуйте сами придумать свойство карты, описывающееся числом с плавающей точкой.

C++
1
2
3
4
5
6
7
8
9
10
11
12
class Card {
 public:
  Card() : suit(0), rank(0) {}
  Card(int suit, int rank) : suit(suit), rank(rank) {}
  int getSuit() const { return suit; }
  int getRank() const { return rank; }
  void setSuit(int suit) { this->suit = suit; }
  void setRank(int rank) { this->rank = rank; }
 private:
  int suit;
  int rank;
};
Добавлено через 12 минут
Пример использования.
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
#include <iostream>
 
class Card {
 public:
  Card() : suit(0), rank(0) {}
  Card(int suit, int rank) : suit(suit), rank(rank) {}
  int getSuit() const { return suit; }
  int getRank() const { return rank; }
  void setSuit(int suit) { this->suit = suit; }
  void setRank(int rank) { this->rank = rank; }
 private:
  int suit;
  int rank;
};
 
 
const char *getCardRankName(int rank) {
  static const char RANK_NAMES[][10] = {"2", "3", "4", "5", "6", "7",
    "8", "9", "10", "jack", "queen", "king", "ace"};
  return RANK_NAMES[rank];
}
 
const char *getCardSuitName(int suit) {
  static const char SUIT_NAMES[][10] = {"spades", "hearts", "diamonds",
    "clubs"};
  return SUIT_NAMES[suit];
}
 
int main(int, char **) {
  
  for (int suit = 0; suit < 4; ++suit) {
    for (int rank = 0; rank < 13; ++rank) {
      Card card(suit, rank);
      std::cout << getCardRankName(card.getRank()) << " of " <<
        getCardSuitName(card.getSuit()) << std::endl;
    }
  }
 
  return 0;
}
1
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 40
29.05.2013, 13:55  [ТС] 4
Цитата Сообщение от lemegeton Посмотреть сообщение
Бессмысленно. Попробуйте сами придумать свойство карты, описывающееся числом с плавающей точкой.

C++
1
2
3
4
5
6
7
8
9
10
11
12
class Card {
 public:
  Card() : suit(0), rank(0) {}
  Card(int suit, int rank) : suit(suit), rank(rank) {}
  int getSuit() const { return suit; }
  int getRank() const { return rank; }
  void setSuit(int suit) { this->suit = suit; }
  void setRank(int rank) { this->rank = rank; }
 private:
  int suit;
  int rank;
};
Добавлено через 12 минут
Пример использования.
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
#include <iostream>
 
class Card {
 public:
  Card() : suit(0), rank(0) {}
  Card(int suit, int rank) : suit(suit), rank(rank) {}
  int getSuit() const { return suit; }
  int getRank() const { return rank; }
  void setSuit(int suit) { this->suit = suit; }
  void setRank(int rank) { this->rank = rank; }
 private:
  int suit;
  int rank;
};
 
 
const char *getCardRankName(int rank) {
  static const char RANK_NAMES[][10] = {"2", "3", "4", "5", "6", "7",
    "8", "9", "10", "jack", "queen", "king", "ace"};
  return RANK_NAMES[rank];
}
 
const char *getCardSuitName(int suit) {
  static const char SUIT_NAMES[][10] = {"spades", "hearts", "diamonds",
    "clubs"};
  return SUIT_NAMES[suit];
}
 
int main(int, char **) {
  
  for (int suit = 0; suit < 4; ++suit) {
    for (int rank = 0; rank < 13; ++rank) {
      Card card(suit, rank);
      std::cout << getCardRankName(card.getRank()) << " of " <<
        getCardSuitName(card.getSuit()) << std::endl;
    }
  }
 
  return 0;
}
Можете рассказать где именно используется конструктор с параметрами!
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.05.2013, 14:06 5
Цитата Сообщение от Karata Посмотреть сообщение
Можете рассказать где именно используется конструктор с параметрами!
строка 33.
1
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 40
29.05.2013, 14:08  [ТС] 6
Цитата Сообщение от Tulosba Посмотреть сообщение
строка 33.
А конструктор без параметров я так понял не используется
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.05.2013, 14:33 7
Цитата Сообщение от Karata Посмотреть сообщение
А конструктор без параметров я так понял не используется
В примере - нет.
Можно, кстати, из двух конструкторов сделать один:
C++
1
Card(int suit=0, int rank=0) : suit(suit), rank(rank) {}
1
4768 / 2578 / 892
Регистрация: 29.11.2010
Сообщений: 5,576
29.05.2013, 15:57 8
Цитата Сообщение от Tulosba Посмотреть сообщение
Можно, кстати, из двух конструкторов сделать один:
Можно, но плохой стиль.
1
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 40
29.05.2013, 16:15  [ТС] 9
Спасибо всем за помощь, еще можете помочь, нужно описать производный класс,содержащий поле козырь и функцию, проверяющую кроет ли карта указанную в качестве параметра другую карту с учетом козыря.
Я так понял это наследование...
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.05.2013, 16:17 10
Цитата Сообщение от lemegeton Посмотреть сообщение
Можно, но плохой стиль.
Не могли бы поконкретнее?
0
Эксперт С++
177 / 163 / 21
Регистрация: 12.02.2013
Сообщений: 410
29.05.2013, 16:33 11
Не сказал бы что Tulosba тут придерживается плохого стиля (если говорить общо), но в данном контексте - да, неудачный вариант. Но и предложенный by lemegeton c конструктором без аргументов - тоже неудачный. Если мы работаем с такой предметной областью, то трудно себе представить карту с:

1. отсутствующим хотя бы одним из 2-х ключевых (для карты - неотъемлемых) атрибутов
2. с атрибутами, заданными по умолчанию

Посему - единственных хороший вариант - мы ведь хотим, чтобы объект всегда был доступен для корректного использования - предоставить конструктор, требующий указать оба атрибута явно.

А чтобы еще краше было, завести для них enum'ы для более жесткого контроля типов.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.05.2013, 16:43 12
ITcrusader, я согласен с тем, что конструктор без параметров в данном случае довольно странная затея. Но если уж он есть (и считать, что он нужен и полезен), и есть конструктор с параметрами (который тоже нужен и полезен), то почему бы не объединить их в один с параметрами по умолчанию. Вот это для меня не понятно, и именно это я просил прояснить.
0
Эксперт С++
177 / 163 / 21
Регистрация: 12.02.2013
Сообщений: 410
29.05.2013, 16:50 13
Tulosba, ну да) Я потому и был осторожен и написал
Цитата Сообщение от ITcrusader Посмотреть сообщение
(если говорить общо)


Например для точки 3D - очень даже удобно завести конструктор такой:
C++
1
Point( double x = 0, double y = 0, double z = 0);
Работая в 2D плоскости просто юзаем так:
C++
1
Point point( 3.23, 2.32 );
словно и нет 3-го измерения, удобно, интуитивно понятно, лишено недостатков, как мне кажется.

так что мне тоже интересно, почему это - признак плохого стиля
0
4768 / 2578 / 892
Регистрация: 29.11.2010
Сообщений: 5,576
29.05.2013, 17:04 14
Цитата Сообщение от ITcrusader Посмотреть сообщение
Но и предложенный by lemegeton c конструктором без аргументов - тоже неудачный.
Цитата Сообщение от Tulosba Посмотреть сообщение
ITcrusader, я согласен с тем, что конструктор без параметров в данном случае довольно странная затея.
Джентльмены, вы не понимаете, для чего нужен конструктор без аргументов? Поясню:
C++
1
2
std::vector<Card> v(5); // массив из пяти карт
Card fiveCards[5]; // а так?
Конечно, хорошо, когда нет конструктора по-умолчанию и все параметры задаются явно. Но такое не всегда возможно.
0
Эксперт С++
177 / 163 / 21
Регистрация: 12.02.2013
Сообщений: 410
29.05.2013, 17:10 15
Понятно, для чего он нужен)

Непонятно, почему это:

Цитата Сообщение от Tulosba Посмотреть сообщение
Можно, кстати, из двух конструкторов сделать один:
C++
1
Card(int suit=0, int rank=0) : suit(suit), rank(rank) {}
названо плохим стилем (тоже дает возможность создания массивов, векторов, как описано выше).
0
MrGluck
29.05.2013, 17:11
  #16

Не по теме:

Не мой код - говнокод

Дело вкуса

1
4768 / 2578 / 892
Регистрация: 29.11.2010
Сообщений: 5,576
29.05.2013, 17:33 17
Цитата Сообщение от ITcrusader Посмотреть сообщение
названо плохим стилем (тоже дает возможность создания массивов, векторов, как описано выше).
Плохим стилем является объявление значений по-умолчанию для конструктора. Долго и нудно разглагольствовать, может быть позже у меня будет демагогическое настроение. В двух словах -- усложняет поддержку кода.

Добавлено через 3 минуты
Естественно, земля вертится, количество вариантов бесконечно, так что бывают случаи, когда конструкторы с дефолтными значениями параметров оправданы. Да и вообще, опыт появляется от прыганья по граблям. Так что никакой демагогии не дождетесь -- пишите, как считаете нужным.
2
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
29.05.2013, 21:03 18
Разница, которую я вижу в отличии кода с двумя конструкторами:
C++
1
2
Card() : suit(0), rank(0) {}
Card(int suit, int rank) : suit(suit), rank(rank) {}
от кода с одним, но с параметрами по умолчанию:
C++
1
Card(int suit=0, int rank=0) : suit(suit), rank(rank) {}
Это, как минимум, добавление во втором случае возможности вызова, конструктора с одним параметром, что может быть использовано для неявного преобразования int в Card.
В некоторых случаях это нежелательно. Однако, добавление explicit к конструктору позволит исключить возможность такого преобразования:
C++
1
excplicit Card(int suit=0, int rank=0) : suit(suit), rank(rank) {}
Чем ещё может усложнить поддержку кода наличие параметров по умолчанию в конструкторе, мне не ясно.
Надеюсь, уважаемый lemegeton всё же снизойдет до подробностей.
Можно даже без демагогии, но с конкретными примерами.
1
Эксперт С++
177 / 163 / 21
Регистрация: 12.02.2013
Сообщений: 410
29.05.2013, 21:40 19
lemegeton, я, в свою очередь, могу сказать, что дискуссию тож неохота разводить - на работе не так удобно отписывать сюда И спорить тоже не нужно, лишь просто заинтересовался характеристикой "плохой стиль", и подумал, что, быть может, чего-то интересного не знаю, а если не знаю - стремлюсь узнать.

Что касается вопроса сопровождения - возможно да, иногда усложняет, не натыкался, но да
Цитата Сообщение от lemegeton Посмотреть сообщение
Естественно, земля вертится, количество вариантов бесконечно, так что бывают случаи, когда конструкторы с дефолтными значениями параметров оправданы.
т.е. все зависит от предметной области и требуемых ограничений на политику работы с классом, взять, хотя бы, мой пример с точками, где такой прием, не насаждаю, кажется мне коротким и удобным.

P.S. этот пост не имеет целью продолжить дискуссию на эту тему, думаю, мы пришли к консенсусу
0
Tulosba
29.05.2013, 21:54     Класс игральная карта
  #20

Не по теме:

Цитата Сообщение от ITcrusader Посмотреть сообщение
дискуссию тож неохота разводить
Форум - не место для дискуссий? :D

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2013, 21:54

игральная кость
Игральная кость бросается 120 раз. Какова вер-ть того, что 6 очков выпадут от 18 до 24 раз....

игральная кость
Игральную кость бросают 500 раз. Найти вероятность события, состоящегося в том, что шестерка...

Игральная кость (поправить код)
Игральная кость бросается N раз. Определить сколько раз впадает значения 1, 2, 3, 4, 5, 6....

Игральная кость бросается 1 раз
Игральная кость бросается 1 раз. Найти вероятность следующих событий: а) появление не менее 4...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru