重载操作符,本例中重载操作符的目的是什么?

overloading operators, what is the purpose of the overladed operator in this example

本文关键字:操作符 重载 是什么      更新时间:2023-10-16

我一直试图理解这段代码中重载操作符的用法,但是,我无法将我的思想集中在它上面。我不明白重载操作符的确切目的,也不明白为什么需要重载操作符。我知道这是一个新手问题,但如果有人能解释一下,我会非常感激。

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++中,您只能使用+来添加整数类型,指针类型[具有整数类型]和浮点类型。其他的都需要特殊的操作人员。

里面的实际数学似乎是21点的一部分,其中ACE根据情况被计数为110

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

编辑2:在上述"思考"的基础上,我想补充一点,比如,卡牌游戏的逻辑不应该在Card中处理。游戏的逻辑属于任何"处理"牌——无论游戏是扑克、二十一点还是纸牌,牌的行为都应该完全相同。

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

操作符重载在操作用户定义的类型时就会出现,例如:这里是类Card的对象。'+'操作符用于基本数据类型,如int, float, double。因此,您在这里所做的是添加'+'的功能来操作类对象。

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