gpt4 book ai didi

c++ - 另一个类的 friend 类函数?

转载 作者:搜寻专家 更新时间:2023-10-31 01:04:35 24 4
gpt4 key购买 nike

我正在尝试用 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 类的成员,并且能够从 deckcards 中移除 number 卡片。由于 cardsdeck 的私有(private)元素,我无法在 draw() 中将其引用为 target_deck.cards。我已经尝试将友元函数添加到 deck 类中:

friend void player::draw(deck&target_deck, uint number);

但这并不能解决问题。代码有问题吗,或者唯一的解决方案是 (a) 在 player 之外定义友元函数,或者 (b) 使整个 player 类成为 甲板

在此先感谢您的指点!

最佳答案

我会通过提供公共(public)函数 deck::draw() 来解决这个问题,该函数返回牌组中最上面的牌(并将其从牌组中移除)。然后,您可以根据需要多次调用 deck::draw() 来实现 player::draw()

如果您实现了 deck::draw(),那么您可能希望 deck::initialize() 在将 52 张新牌插入之前清空牌组.

作为一个次要的风格说明,C++ 支持将 void 放入不带参数的函数的参数列表中以向后兼容 C,但在新 C++ 中并不常用代码。 C 支持它的原因是因为函数声明(原型(prototype))foo() 没有说明函数采用的参数,而 foo(void) 表示函数不采用争论。 C++ 始终将 foo() 视为不带参数。

关于c++ - 另一个类的 friend 类函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23667542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com