我有一个问题,我需要使用运算符重载添加两个类成员。问题还在于我需要添加的成员是字符串..我尝试使用stringstream但我似乎没有工作,发生了无限循环的错误。是否有一种非常简单的方法可以将字符串转换为要添加的整数?或至少一种方法来添加两个字符串来打印总和
class PlayingCard
{
public:
char suit;
string rank;
PlayingCard operator +();
};
PlayingCard deck[52];
PlayingCard player[10];
PlayingCard dealer[10];
int playerHits = 2;
int dealerHits = 2;
PlayingCard PlayingCard::operator+()
{
int r1;
int r2;
stringstream pr1;
stringstream pr2;
string temp1 = player[1].rank;
string temp2 = player[2].rank;
pr1 << temp1;
pr2 << temp2;
pr1 >> r1;
pr2 >> r2;
return(r1 + r2);
}
答案 0 :(得分:3)
您的operator+
不接受任何参数,因此无法使用。
成员operator+
必须具有以下签名:
class X {
X operator+(const X &b);
};
free operator+
需要这样:
X operator+(const X &a, const X &b);
嗯,这是一种方法。
我建议你回到书中;)
答案 1 :(得分:2)
你可能想要首先定义“一起添加两张扑克牌”的操作意味着什么。“假设我有黑桃的杰克和心灵的女王,身体在我手中。作为物理实体,那些不添加。
然而,他们的等级确实如此;如果我们将整数值分配给他们的排名,我们可以说jack + queen => 11 + 12 => 23
。显然没有“23张牌”。因此,将两个PlayingCard
加在一起无法可靠地返回有效的PlayingCard
。
问题是,在需要时查询rank
会更容易吗?例如:
if (card1.rank + card2.rank > 21) {
// dealer wins
}
在这种情况下,甚至没有返回中间PlayingCard
- 我们关心的只是rank
和{card1
的总和card2
1}}。
很抱歉,我偏离了您的来源...上面假设您将等级存储为int
,就像您在previous question中一样。这种方法是非常优选的,因为你将对它们进行数学运算(就像上面我的愚蠢的例子)。
答案 2 :(得分:0)
如何使用atoi
?
atoi(player[1].rank.c_str());
答案 3 :(得分:0)
在此您将返回类型定义为PlayingCard
PlayingCard PlayingCard::operator+()
但是这里你返回一个整数:
int r1;
int r2;
// STUFF
return(r1 + r2);