运算符重载+符号,用于类成员

时间:2010-12-09 23:18:32

标签: c++ operator-overloading

我有一个问题,我需要使用运算符重载添加两个类成员。问题还在于我需要添加的成员是字符串..我尝试使用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);

}

4 个答案:

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