如何在c ++中设置私有成员数据

时间:2013-09-19 07:30:39

标签: c++ class vector private-members

我正在用C ++制作一个扑克概率程序。该程序将制作一个套牌,随机播放,交易五张牌并确定你拥有什么样的牌。这将运行16000次,并估计出现的平均手数。

我制作了三个班级,一个班级班,一个甲板班和一个班级班。卡类具有套装的字符和等级的int,甲板类具有52张卡的向量,其需要是私有的,并且手类具有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;

}

当我的成员是私有的时候,怎么能让这个函数返回一个hand类型的对象?谢谢。

3 个答案:

答案 0 :(得分:1)

您需要为私人成员添加一个setter,例如:

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 ) );
}   

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

声明&#34;手&#34;作为&#34; deck&#34;的朋友。类。

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

现在&#34; deck&#34;的对象class可以访问class&#34; hand&#34;的私有属性。对象。