重载运算符,在这个例子中重叠运算符的目的是什么

时间:2013-05-12 07:50:15

标签: c++ operators operator-overloading overloading

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

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

}

我再次非常感谢你的帮助。

3 个答案:

答案 0 :(得分:4)

“目的”是将两个Card个对象添加到一起。通常,您只能使用+添加整数类型,指针类型[带整数类型]和C和C ++中的float类型。其他任何东西都需要一个特殊的操作员。

其中的实际数学似乎是BlackJack的某些部分,其中ACE根据具体情况计为110

编辑:我个人认为这不是operator+的好使用,因为operator+的期望是将两个东西放在一起,而不是应用逻辑,然后基于某些添加不同的“游戏规则”。这符合“不惊喜”的规则。应该使用具有合理名称的函数,例如CalculateHand

Edit2:除了上述“思考”之外,我还要补充说,卡片游戏的逻辑不应该在Card中处理。游戏的逻辑属于任何“处理”卡片 - 无论游戏是什么,扑克,BlackJack或Solitaire,卡片应该表现完全相同。

答案 1 :(得分:3)

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

答案 2 :(得分:0)

每当您在用户定义的类型上操作时,操作员重载就会出现,例如:此类类卡的对象。 '+'运算符用于原始数据类型,如int,float,double。所以你在这里做的是增加'+'的功能来操作类对象。

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