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

Printing out a class objects variables from a stack

本文关键字:对象 变量 打印 堆栈      更新时间:2023-10-16

我正在制作一个二十一点游戏作为练习的手段。 我一开始使用数组,但决定尝试使用堆栈制作版本,因为我可以将这种做法与堆栈一起使用。

我创建了一个扑克牌课。

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

首先,我的理解是否正确,即将 PlayingCard 对象推到带有"C"(俱乐部)和值为 9 的堆栈上?

我现在遇到的问题是当玩家从堆栈中"抽出一张牌"时打印出花色和值值。

我不能只做"cout <<deck1.top();",因为它是一堆类对象,花色和值值是 playingCard 的私有变量,使用 get 函数检索。

我尝试使这个函数打印出值:

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

调用如下所示:

prints(deck1.top());

但是,这并没有给我正确的输出。 有什么建议吗? 如果我应该只使用向量或数组,那么我想我可以这样做,但我认为最好使用堆栈,因为堆栈可以更好地模仿实际的一副牌如何从一副牌的顶部弹出和绘制一张牌。

你可以考虑更C++/OOP的方法,在你的类中添加一个方法"show()",如:

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()

编辑:

哎呀。

好吧,不,堆栈不是向量。 但是想法是一样的...旋转遍历套牌中的每个条目,并调用 show 方法。由于您尚未完成设计,因此您必须决定如何完成对每个堆栈项目的访问。

首先,我的理解是否正确,即将 PlayingCard 对象推到带有"C"(俱乐部)和值为 9 的堆栈上?

查看函数使用情况

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

和定义

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

它应该是

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

或更改函数定义

PlayingCard(char type, int val)

验证PlayingCard(int val, char type)deck1.push(PlayingCard('C', 9));

我不能只做"cout <<deck1.top();",因为它是一堆类对象,花色和值值是 playingCard 的私有变量,使用 get 函数检索。

是的,你可以。过载operator <<

class PlayingCard
{
    ...
    friend ostream & operator << (PlayingCard &card);
};
ostream &operator << (PlayingCard &card)
{
    out << tester.getSuit() << " " << tester.getValue();
    return out;
}
//cout << deck.top() << endl; should work