0

C++ でポーカー確率プログラムを作成しています。プログラムはデッキを作り、それをシャッフルし、5 枚のカードを配り、あなたが持っているハンドの種類を決定します。これは 16000 回実行され、出てくるハンドの平均数を推定します。

カードクラス、デッキクラス、ハンドクラスの3クラスを作りました。カード クラスにはスーツの文字とランクの int があり、デッキ クラスにはプライベートである必要がある 52 枚のカードのベクトルがあり、ハンド クラスにはプライベート メンバーである必要がある 5 枚のカードのベクトルがあります。デッキ クラスには、デッキの最初の 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 型のオブジェクトを返すようにするにはどうすればよいですか?? ありがとうございました。

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() メソッドを追加するだけで、それを押し戻すことができます。同時に、ハンドがまだ 5 枚のカードを持っていないかどうかを確認することもできます...

于 2013-09-19T07:40:01.223 に答える
-1

「hand」クラスを「deck」クラスのフレンドとして宣言します。

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

「デッキ」クラスのオブジェクトは、クラス「ハンド」オブジェクトのプライベート プロパティにアクセスできるようになりました。

于 2013-09-19T07:34:38.360 に答える