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

时间:2015-06-18 00:09:40

标签: c++ class stack

我正在制作二十一点游戏作为练习的手段。我最初使用了一个数组,但决定尝试使用堆栈制作一个版本,因为我可以使用堆栈的练习。

我创建了一个扑克牌课程。

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

首先,我是否正确理解将PlayCard对象推入堆栈,并使用“C”(俱乐部)和9的值?

我现在遇到的问题是当玩家从筹码中“抽出一张牌”时打印套装和价值。

我不能只做“cout&lt;&lt; deck1.top();”因为它是一组类对象,套装和值是playCard的私有变量,它们是通过get函数检索的。

我尝试使用此功能来打印输出值:

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

电话看起来像这样:

prints(deck1.top());

然而,这并没有给我正确的输出。有什么建议?如果我应该使用矢量或数组,那么我想我可以做到这一点,但我认为最好使用堆栈,因为堆栈更好地模仿真实的卡片组如何工作弹出并从顶部拉出一张卡片甲板

3 个答案:

答案 0 :(得分:2)

您可以考虑使用更多C ++ / OOP方法,方法是在PlayCard中添加一个方法“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方法。由于您尚未完成设计,因此您必须决定如何访问每个堆栈项目。

答案 1 :(得分:1)

首先,我是否正确理解将PlayCard对象推入堆栈,并使用“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)

答案 2 :(得分:1)

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

  

我不能做&#34; cout&lt;&lt; deck1.top();&#34;因为它是一组类对象,套装和值是playCard的私有变量,用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