首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++中的简单类概念(纸牌中的牌)

C++中的简单类概念(纸牌中的牌)
EN

Stack Overflow用户
提问于 2010-09-30 02:40:04
回答 4查看 5.9K关注 0票数 0

上课让我迷惑了!对于这个特殊的任务,我们要做经典的‘卡在一个甲板’程序。我们要做两个班,一个叫‘卡片’,另一个叫‘甲板’。到目前为止,我已经完成了很大一部分工作,但似乎有一个概念在逃避我。

当我们为Card类调用默认构造函数时,将创建所有52张卡片,以便Deck类可以使用这些对象和.那就造个甲板吧!现在,我与我们的TA一起参加了一次会议,他强调,默认的构造函数是初始化值,而Deck类则接受这些对象并遍历这些对象,从而使用一个函数将实际的卡片值分配给card对象。

我的问题是:创建这些对象以便Deck可以引用它们的最佳方法是什么?我现在的想法是创建一个名为‘initialCard4 4’的固定数组。从那里,Deck类将选择一个值--比如'initialCard‘,并将其分配给一个只从二维数组的行和列中的黑桃组成的数组。然而,我的助教总是说‘创建一个卡片对象数组’。他这么说是什么意思?我有点把握,但我只是不确定.有人有什么想法吗?谢谢!

也许这会有帮助;直接从作业页面:

您的card类应该具有这两个变量(getValue、setValue等)的公共getter和setter函数,以及返回卡的c字符串表示的函数。(如果你愿意的话,你可以叫它toCString。)它应做到以下几点:

void toCString(char cardString[])输入:用于存储输出输出的字符数组:无此函数应返回表示卡片对象的字符串。此字符串必须具有以下形式:两个字符,后面跟着第三个空字节。第一个字符代表西装;第二个字符代表价值。西装应该是“S”,“H”,“C”,或者“D”,代表黑桃,心,

棍棒钻石。第二个字符代表价值:“A”代表Ace,2-9代表编号卡片,“T”代表10,“J”代表杰克,“Q”代表皇后,“K”代表国王。一些例子:2黑桃= 'S2‘10的心= 'HT’钻石的杰克= 'DJ‘的俱乐部女王= 'CQ’的黑桃= 'SA‘等等。

除了这些之外,您至少应该有一个默认的构造函数来初始化值。欢迎您创建其他构造函数(可能是从它的c-字符串表示形式初始化卡片的构造函数?)但这并不是必需的。

甲板类:除了您的卡片类,您还需要创建一个Deck类来封装所有的卡片对象。在这个对象中,您应该有一个您的Card对象的私有成员多维数组(大小与值相匹配)。创建Deck对象时,应该让它初始化卡片的多维数组。纸牌套装由枚举类型表示;卡片值由1到13之间的整数表示(1为Ace,2-10为编号值,11为千斤顶,12为女王,13为国王)。

构造函数应该遍历多维数组并初始化所有值,以便表示完整的卡片。。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-09-30 02:50:58

做某事总有一百种方法。对我来说,在创建类和程序结构时,我总是想事情是如何相互关联的。

在你的问题上,卡在甲板上,关系是陈述的。每个Card对象都属于一个甲板。我会从创建Card类开始,因为它没有比Deck类更低的东西。听起来你已经走到这一步了。

我会设计卡片类来描述一张卡片,没有别的。价值和西装。Deck类I将有一个私有变量保存一组卡片。在Deck类构造函数中,我将创建52张卡片。如果你想得到花哨,使用一个列表,而不是一个数组,这样你可以添加多少卡片,你喜欢。不是所有的纸牌游戏都在一副牌中使用52张牌。

一旦Deck被实例化,它的所有方法都可以访问卡片数组。

票数 1
EN

Stack Overflow用户

发布于 2010-09-30 02:48:36

听起来你没有得到最好的建议。

将一个对象构造成一个真正有效的状态总是比较干净的。因此,与其默认-用无意义的值构造卡片,然后再填写,不如用适当的值来构造它们。这可以用vector来完成,它具有数组的大部分优点。

所以,你应该

代码语言:javascript
复制
class deck {
    std::vector< Card > cards;
    ...
    deck() {
        // no cards yet at this point
        for ( size_t i = 0; i < 52; ++ i ) {
            cards.push_back( Card( i ) );
        }
        // now array is valid
        ...

避免使用具有非平凡构造函数的类的C样式数组。

票数 2
EN

Stack Overflow用户

发布于 2010-09-30 02:45:47

代码语言:javascript
复制
Class Deck {
private:
  Card cardArray[52];
public:
  Card* getCard(int n) { ... };
    ...

卡片对象的数组。

代码语言:javascript
复制
Deck::Deck() {
  for (int i=0;i<52;i++) {
    cardArray[i].setValue(i);
  }
}

给每个人分配一个值。

简单吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3827320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档