我正在制作一个Card and Deck程序,我对如何在构造函数中实现一个功能使卡等级等于“Ace”“Jack”“King”“Queen”等等有点困惑。数字。
Card::Card(char suiter, int ranker) {
suit = suiter;
rank = ranker;
if (rank == 1) {
rank = "Ace"; //Assign rank to "Ace" if the number equals 1
}
}
答案 0 :(得分:1)
您可以尝试使用枚举。这不是一个字符串,而是一组常量int,保证不共享值。
enum CardRank
{
Ace,
Two,
... ... ...
Jack,
Queen,
King
};
这会创建一个新类型CardRank
,您只能在代码中使用卡片排名。您只需将rank
成员设为CardRank
类型,即可按名称引用其值。
在大多数意图和目的下,这是一个无符号整数,只能接受Ace
(0)到King
之间的值(12)
鉴于我没有看到你试图将这个字符串写入屏幕,这可能是要走的路。即使你 计划将这个字符串写出来,你仍然可能想要使用这个枚举,并且只需要在需要用这样的查找来编写字符串时拉出字符串:
std::string RankNames[] =
{
"Ace",
"2",
... ... ... ...
"Jack",
"Queen",
"King"
};
CardRank rank = Ace;
std::cout << RankNames[rank] << std::endl;
答案 1 :(得分:0)
你不能使用rank作为i int和next作为i string类型。如果你想创建类似的东西,尝试使用字符串类型进行排名。 豪
答案 2 :(得分:0)
您可能不想在构造函数中执行此操作。相反,当等级值等于特定数字时,您可以更改ostream的输出。例如:
ostream & operator<<(ostream &out, const Card &rhs) {
if (rhs.rank == 1) {
out << "Ace of ";
}
}