gpt4 book ai didi

c++ - 从堆栈中打印出类对象变量

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

我正在制作二十一点游戏作为练习的一种方式。我一开始使用数组,但决定尝试使用堆栈制作一个版本,因为我可以使用堆栈进行练习。

我创建了一个纸牌类。

class PlayingCard
{
private:
int value;
char suit;

public:
PlayingCard();

PlayingCard(int val, char type)
{
value = val;
suit = type;
}

int getValue()
{
return value;
}

char getSuit()
{
return suit;
}

void setValue(int val)
{
value = val;
}

void setSuit(char type)
{
suit = type;
}
};

然后我创建了一个该类的堆栈。

stack<PlayingCard> deck1;

例如,我将以下内容压入堆栈:

deck1.push(PlayingCard('C', 9));

首先,我的理解是否正确,即把花色为“C”(梅花)且值为 9 的 PlayingCard 对象压入堆栈?

我现在遇到的问题是当玩家从牌堆中“抽牌”时打印花色和值(value)。

我不能只做“cout << deck1.top();”因为它是一堆类对象,而 suit 和 value 值是 playCard 的私有(private)变量,可以使用 get 函数检索。

我试着让这个函数打印出值:

void prints(PlayingCard tester)
{
cout << tester.getSuit() << " " << tester.getValue() << "\n";
}

调用看起来像这样:

prints(deck1.top());

然而,这并没有给我正确的输出。有什么建议吗?如果我应该只使用 vector 或数组,那么我想我可以做到,但我认为使用堆栈会更好,因为堆栈更好地模拟了实际的纸牌如何从顶部弹出和绘制卡片甲板的。

最佳答案

您可以通过向类 PlayingCard 添加一个方法“show()”来考虑更多 C++/OOP 方法,如:

class PlayingCard
{
private:
int value;
char suit;

public:
//...

std::string show()
{
std::stringstream ss;
ss << " " << value << " " << suit << std::endl;
return (ss.str());
}

// ...
};

然后,在您的代码中,在声明一副牌并将一些牌放入其中之后...

// ...

deck1.push(PlayingCard('C', 9));
// more cards ...

// to show the entire deck, you would want to be able to do something
// like:
for (size_t i=0; i<deck1.size(); ++i) // for each card
std::cout << deck[i].show() << std::endl; // invoke show()

编辑:

糟糕。

嗯,不,堆栈不是 vector 。但想法是一样的……旋转浏览牌组中的每个条目,然后调用 show 方法。由于您尚未完成设计,因此您必须决定如何完成对每个堆栈项的访问。

关于c++ - 从堆栈中打印出类对象变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30904499/

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