我一直在尝试了解此代码中重载运算符的用法,但是,我无法解决这个问题。我不完全了解重载运算符的目的或为什么需要它。我知道这是一个新手问题,但是如果有人可以解释,我将不胜感激。
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);
}
再次,我真的很感谢对此的任何帮助。
最佳答案
“目的”是将两个Card
对象添加在一起。通常,您只能使用+
在C和C ++中添加整数类型,指针类型[具有整数类型]和浮点类型。其他任何操作都需要特殊的运算符。
其中的实际数学运算似乎是BlackJack的一部分,其中ACE
视情况而定为1
或10
。
编辑:我个人认为这不是operator+
的好用法,因为operator+
的期望是将两件事加在一起,而不是应用逻辑,然后根据某些“游戏规则”进行不同的加法。这遵循“没有惊奇”的规则。应该改用具有合理名称的函数,例如CalculateHand
。
Edit2:除了上述“思考”之外,我还要补充一点,例如,纸牌游戏的逻辑不应在Card
中处理。游戏的逻辑在于牌的任何“处理”-无论游戏是什么,扑克,二十一点或纸牌,牌的行为应完全相同。