我一直在尝试理解在此代码中使用重载运算符,但是,我无法理解它。我不完全理解重载运算符的目的或为什么需要它。我知道这是一个新手问题,但如果有人能解释,我会非常感激。
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);
}
我再次非常感谢你的帮助。
答案 0 :(得分:4)
“目的”是将两个Card
个对象添加到一起。通常,您只能使用+
添加整数类型,指针类型[带整数类型]和C和C ++中的float类型。其他任何东西都需要一个特殊的操作员。
其中的实际数学似乎是BlackJack的某些部分,其中ACE
根据具体情况计为1
或10
。
编辑:我个人认为这不是operator+
的好使用,因为operator+
的期望是将两个东西放在一起,而不是应用逻辑,然后基于某些添加不同的“游戏规则”。这符合“不惊喜”的规则。应该使用具有合理名称的函数,例如CalculateHand
。
Edit2:除了上述“思考”之外,我还要补充说,卡片游戏的逻辑不应该在Card
中处理。游戏的逻辑属于任何“处理”卡片 - 无论游戏是什么,扑克,BlackJack或Solitaire,卡片应该表现完全相同。
答案 1 :(得分:3)
当你不使用运算符重载时,这是恕我直言的一个很好的例子。似乎代码返回根据特定游戏规则计算的值。也许BlackJack,但没关系。我认为在这种情况下,它最好是一个具有适当名称的函数,而不是重载的运算符+,因为后者没有卡的一般概念。
答案 2 :(得分:0)
每当您在用户定义的类型上操作时,操作员重载就会出现,例如:此类类卡的对象。 '+'运算符用于原始数据类型,如int,float,double。所以你在这里做的是增加'+'的功能来操作类对象。
@Mats Petersson提到的也是正确的,你不应该在操作符重载函数中强加任何逻辑,而是在需要时使用不同的函数。