0

我正在用 C++ 制作一个扑克概率程序。该程序将制作一副牌,洗牌,发五张牌,然后确定你的手牌类型。这将运行 16000 次并估计出现的平均手数。

我做了三个课程,一个卡片课程,一个甲板课程和一个手牌课程。card 类有一个花色的字符和一个等级的 int,deck 类有一个需要私有的 52 张卡片的向量,hand 类有一个 5 卡片的向量,也需要是私有成员。现在甲板类需要有一个 dealHand() 函数,它将甲板的前五张牌复制到手向量中,但是当手向量需要是私有的并且不能从甲板类访问时我怎么能这样做?

这是我的甲板课

class deck
{
    public:
    deck();
    void shuffle();
    hand dealHand();
    void printDeck();

    private:
    vector<card> deckData;
    void loadDeck();


};

这是我的手课

class hand
{
public:
hand();
void printHand();

private:
vector<card>handData;
void initHand();
};

这是我的 dealHand 函数的定义

hand deck::dealHand()
{
    hand hand;
    for(int j=0; j<5; j++)
    {
        hand.handData[j].suit = deckData[j].suit;
        hand.handData[j].rank = deckData[j].rank;
    }
    return hand;

}

当它的成员是私有的时,我怎样才能让这个函数返回一个类型为手的对象?谢谢你。

4

3 回答 3

1

您需要为私有成员添加一个设置器,例如:

class hand
{
public:
   hand();
   ...
   void addCard( suit s, rank r );
   ...
private:
   vector<card>handData;
   ...
};

void hand::addCard( suit s, rank r )
{
    // if you had a constructor for card using suit and rank as parameters
    handData.push_back( card( s, r ) );
}   
于 2013-09-19T07:37:53.310 回答
0

您可以在 Hand 类中添加一个 giveCard() 方法,将其推回,同时它允许您检查手牌是否还没有五张牌......

于 2013-09-19T07:40:01.223 回答
-1

将“hand”类声明为“deck”类的朋友。

class hand {
   friend class deck;
   ...
};

现在“deck”类的对象可以访问“hand”类对象的私有属性。

于 2013-09-19T07:34:38.360 回答