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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Karata
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 40
#1

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

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

Помогите описать класс карта нужно описать ее масть и номер с двумя конструкторами, один обязательно с параметрами, помогите нужно сделать к завтрашней паре, а да еще конструктор должен обязательно задействован, и пожалуйста с переменными флоат если это возможно, но не со строками..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2013, 08:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс игральная карта (C++):

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

Описать класс "карта" - C++
Помогите нужно к паре сделать прогу, а я с класами вообще не как задание "описать класс карта(масть и достоинство)содержащий функцию...

Иерархия: класс "карта", "колода карт" - C++
(Иерархия). Создать класс карта, имеющая ранг и масть. Карту можно перевернуть и открыть. Создать класс – колода карт, содержащий карты....

Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени? - C++
На самом деле ничё фантастического я не прошу, ведь: template <class T> class matrix { friend class diagonal; ...

Класс таблиц баз данных и класс записей в таблице(реляционная таблица). Предусмотреть класс связей между таблицами - C++
Здравствуйте! Никак не могу продумать структуру этой программы. Проходим наследование, но я все равно не знаю, как его здесь применить. Как...

Отдельно класс данных, класс формул и главный класс - C++
Здравствуйте! У меня есть три вопроса. Первый вопрос. Скажите пожалуйста! Правильный ли это подход к созданию приложений :...

40
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
29.05.2013, 08:43 #2
Цитата Сообщение от Karata Посмотреть сообщение
с переменными флоат если это возможно
А что в игральной карте может описываться вещественной переменной? Толщина материала, из которого она сделана?
1
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
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
Karata
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
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
29.05.2013, 14:06 #5
Цитата Сообщение от Karata Посмотреть сообщение
Можете рассказать где именно используется конструктор с параметрами!
строка 33.
1
Karata
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 40
29.05.2013, 14:08  [ТС] #6
Цитата Сообщение от Tulosba Посмотреть сообщение
строка 33.
А конструктор без параметров я так понял не используется
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
29.05.2013, 14:33 #7
Цитата Сообщение от Karata Посмотреть сообщение
А конструктор без параметров я так понял не используется
В примере - нет.
Можно, кстати, из двух конструкторов сделать один:
C++
1
Card(int suit=0, int rank=0) : suit(suit), rank(rank) {}
1
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
29.05.2013, 15:57 #8
Цитата Сообщение от Tulosba Посмотреть сообщение
Можно, кстати, из двух конструкторов сделать один:
Можно, но плохой стиль.
1
Karata
0 / 0 / 0
Регистрация: 29.05.2013
Сообщений: 40
29.05.2013, 16:15  [ТС] #9
Спасибо всем за помощь, еще можете помочь, нужно описать производный класс,содержащий поле козырь и функцию, проверяющую кроет ли карта указанную в качестве параметра другую карту с учетом козыря.
Я так понял это наследование...
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
29.05.2013, 16:17 #10
Цитата Сообщение от lemegeton Посмотреть сообщение
Можно, но плохой стиль.
Не могли бы поконкретнее?
0
ITcrusader
Эксперт С++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
29.05.2013, 16:33 #11
Не сказал бы что Tulosba тут придерживается плохого стиля (если говорить общо), но в данном контексте - да, неудачный вариант. Но и предложенный by lemegeton c конструктором без аргументов - тоже неудачный. Если мы работаем с такой предметной областью, то трудно себе представить карту с:

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

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

А чтобы еще краше было, завести для них enum'ы для более жесткого контроля типов.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
29.05.2013, 16:43 #12
ITcrusader, я согласен с тем, что конструктор без параметров в данном случае довольно странная затея. Но если уж он есть (и считать, что он нужен и полезен), и есть конструктор с параметрами (который тоже нужен и полезен), то почему бы не объединить их в один с параметрами по умолчанию. Вот это для меня не понятно, и именно это я просил прояснить.
0
ITcrusader
Эксперт С++
176 / 162 / 8
Регистрация: 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
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
29.05.2013, 17:04 #14
Цитата Сообщение от ITcrusader Посмотреть сообщение
Но и предложенный by lemegeton c конструктором без аргументов - тоже неудачный.
Цитата Сообщение от Tulosba Посмотреть сообщение
ITcrusader, я согласен с тем, что конструктор без параметров в данном случае довольно странная затея.
Джентльмены, вы не понимаете, для чего нужен конструктор без аргументов? Поясню:
C++
1
2
std::vector<Card> v(5); // массив из пяти карт
Card fiveCards[5]; // а так?
Конечно, хорошо, когда нет конструктора по-умолчанию и все параметры задаются явно. Но такое не всегда возможно.
0
ITcrusader
Эксперт С++
176 / 162 / 8
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2013, 17:10
Привет! Вот еще темы с ответами:

Реализовать класс родительский класс "Пара чисел" и класс-наследник "Комплексное число" - C++
Ткма работы создать класс pair (пара чисел); определить метод перемножения полей и операцию сложения пар (a,b)+(c,d) =(a+b,c+d)...

Класс, производный класс, паблик-класс - C++
Задание: Создать класс колесо, которое имеет радиус. Определить конструкторы и метод доступа. Создать класс машин, содержащий класс колесо....

Создать класс “Автомагазин”, состоящей из класса ”Марки машин”. Класс “Автомагазин ”:название магазина, адрес, телефон. Класс “ Марки машин ”: марка - C++
Создать класс “Автомагазин”, состоящей из класса ”Марки машин”. Класс “Автомагазин ”:название магазина, адрес, телефон. Класс “ Марки...

Абстрактный класс CGraphicsObject, его наследник - базовый класс CPoint, и класс - наследник от CPoint - C++
Всем доброй ночи! Очень нужна помощь и по мере возможности разъяснения на темы: абстрактный класс в задании(что он из себя представляет и...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
29.05.2013, 17:10
Ответ Создать тему
Опции темы

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