0

我一直在尝试了解此代码中重载运算符的使用,但是,我无法完全理解它。我不完全理解重载运算符的目的或为什么需要它。我知道这是一个新手问题,但如果有人能解释一下,我将不胜感激。

const int Card::operator+(const Card& B)
{
if ((faceValue ==1 || B.faceValue == 1) && (faceValue + B.faceValue)<= 11)
    return 10 + faceValue + (B.faceValue);
else
    return faceValue + (B.faceValue);

}

我再次非常感谢任何帮助。

4

3 回答 3

4

“目的”是将两个Card对象加在一起。通常,您只能用于+在 C 和 C++ 中添加整数类型、指针类型 [具有整数类型] 和浮点类型。其他任何事情都需要特殊的运算符。

它内部的实际数学似乎是 BlackJack 的一部分,其中 anACE被视为其中之一110视情况而定。

编辑:我个人认为这不是很好地使用operator+,因为期望operator+是将两个东西加在一起,而不是应用逻辑,然后根据一些“游戏规则”进行不同的加法。这遵循“没有惊喜”的规则。CalculateHand应该使用具有合理名称的函数,例如。

Edit2:除了上述“思考”之外,我还要补充一点,比如纸牌游戏的逻辑不应该在Card. 游戏的逻辑属于任何“处理”牌的东西——无论是什么游戏,扑克、二十一点或纸牌,牌的行为都应该完全相同。

于 2013-05-12T07:55:50.550 回答
3

恕我直言,当您不应该使用运算符重载时,这是一个很好的例子。似乎代码返回了一个根据特定游戏规则计算的值。也许二十一点,但没关系。我认为在这种情况下,它最好是一个具有适当名称的函数,而不是重载的运算符 +,因为后者对卡片没有一般概念。

于 2013-05-12T07:58:13.233 回答
0

每当您对用户定义的类型进行操作时,都会出现运算符重载,例如:这里是 Card 类的对象。'+' 运算符用于原始数据类型,如 int、float、double。因此,您在这里所做的是添加“+”的功能以对类对象进行操作。

@Mats Petersson 提到的也是正确的,您不应该在运算符重载函数中强加任何逻辑,而是在需要时使用不同的函数。

于 2013-05-12T08:18:27.650 回答