перегрузка оператора + знак, для членов класса - PullRequest
0 голосов
/ 10 декабря 2010

У меня проблема, мне нужно добавить двух членов класса, используя перегрузку оператора.Проблема также заключается в том, что члены, которые мне нужно добавить, являются строками. Я пытался использовать 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 ]

3 голосов
/ 10 декабря 2010

Ваш operator+ не принимает никаких параметров и поэтому не может работать.

Член operator+ должен иметь следующую подпись:

class X {
    X operator+(const X &b);
};

A free operator+ должно выглядеть так:

X operator+(const X &a, const X &b);

Ну, это один из способов.

Я предлагаю вам вернуться к книгам ;)

2 голосов
/ 10 декабря 2010

Возможно, вы захотите сначала определить, что вы подразумеваете под операцией " сложения двух игральных карт вместе. " Допустим, у меня в руке есть пиковый валет и королева червей. Как физические лица, те не добавляют.

Их ранг, однако, делает; мы могли бы сказать jack + queen => 11 + 12 => 23, если бы мы присвоили целые значения их разрядам. Очевидно, что нет «23 карты». Следовательно, добавление двух PlayingCard вместе не может надежно вернуть действительное PlayingCard.

Вопрос в том, будет ли проще запросить их rank, когда это необходимо? Например:

if (card1.rank + card2.rank > 21) {
  // dealer wins
}

В этом случае даже промежуточное значение PlayingCard не возвращается - нам важна только сумма rank s card1 и card2.

Извините, я немного отклонился от вашего источника ... вышеизложенное предполагает, что вы сохранили ранг как int, как это было в вашем предыдущем вопросе . Этот метод очень предпочтителен, так как вы будете выполнять математические операции над ними (как мой тупой пример выше).

0 голосов
/ 10 декабря 2010

Здесь вы определяете тип возврата как PlayingCard

PlayingCard PlayingCard::operator+()

Но здесь вы возвращаете целое число:

int r1;
int r2;
// STUFF
return(r1 + r2);
0 голосов
/ 10 декабря 2010

Как насчет использования atoi?

atoi(player[1].rank.c_str());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...