我試圖用C++編程德州撲克遊戲。我剛開始閱讀關於朋友的功能,並想過如何使用它們讓玩家從卡組中抽出牌。另一類的朋友類函數?
我已經當前定義的兩個類,如下所示:
#include <string>
#include <vector>
#include <stdio.h>
typedef unsigned int uint;
class deck
{
private:
std::vector<card> cards;
public:
void initialize(void)
{
char suits[] = { 'H', 'C', 'D', 'S' };
uint values[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 };
for (uint i = 0; i != 4; i++)
{
for (uint j = 0; j != 13; j++)
{
cards.push_back(card(suits[i], values[j]));
}
}
}
void shuffle(void)
{
uint i = cards.size(), random_index;
card shuffled_card;
while (i > 0)
{
random_index = rand() % (i + 1);
shuffled_card = cards[random_index];
cards[random_index] = cards[i];
cards[i] = shuffled_card;
i--;
}
}
};
class player
{
private:
std::string name;
uint chips;
std::vector<card> hand;
public:
player(std::string set_name, uint set_chips) { name = set_name; chips = set_chips; }
void draw(deck& target_deck, uint number)
{
// Draw cards from the top of the
// target deck.
}
};
我想要player
類的draw()
方法採取到deck
類的成員的引用,以便能夠除去number
來自cards
的deck
的卡片。由於cards
是deck
的私人元素,因此我不能在draw()
中將其作爲target_deck.cards
來引用。我試着加好友功能爲deck
類:
friend void player::draw(deck&target_deck, uint number);
然而,這並不能解決問題。代碼有問題嗎?或者是唯一的解決方案(a)定義player
以外的朋友功能或(b)使整個player
類成爲朋友deck
?
在此先感謝您的指點!
由Greg答案是很好的,我不認爲朋友功能是什麼,你應該使用這裏 –
什麼用'initialize'功能,而不是一個構造函數嗎? –
朋友成員函數應該可以工作:http://msdn.microsoft.com/en-us/library/ahhw8bzz.aspx –