从堆栈中打印出类对象变量
Printing out a class objects variables from a 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));
首先,我的理解是否正确,即将 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
- 你能重载对象变量名本身返回的内容吗
- 为什么我可以使用 memcpy 将一个对象变量复制到另一个对象变量
- 如何使用std::lower_bound比较对象变量,而不使用第二个对象进行比较
- 将私有对象变量与用户输入的变量进行比较
- 具有已定义操作重载的 C++ 非类型化值对象/变量库
- 如何对对象数组进行排序,而不考虑对象变量类型
- 在功能中设置对象变量
- 如何创建对象变量,以便每次分配新的指针
- C++ FileIO 以读取和写入对象变量
- 私下声明的对象变量的突变器/访问器方法
- C++ 列表中的对象变量在迭代过程中不会更新
- 稍后使用私有对象变量时如何初始化数组(初始化对象后)
- 通过向量更改对象变量的值
- C 全局对象变量内存释放
- 基本数据类型变量 VS 对象变量
- C 复制分配运算符,用于参考对象变量
- c++从列表中移除元素,并将其分配给对象变量
- 我们是否需要在C++中同步局部对象变量
- 点运算符和箭头运算符之间的区别 结构对象变量 在 C 或 C++ 中创建树
- 无法访问在 std 回调中传递的对象变量