这是一个普遍的问题,但我有一些类我想定义一些二进制“操作”,并且有几种不同的方法。例如,假设我有一个Vector
要在其上实现加法运算的类。一方面,我可以只重载'+'
运算符,但我从一些资料中了解到这不是一个很好的做法(这不禁让人问为什么这是一种语言特性)。在许多情况下,我可以看到为什么方法比运算符重载更可取,但是向量加法已得到广泛认可,因此使用'+'
应该非常自然。
另一方面,我可以add()
在类中定义一个方法。我可以将它定义为普通方法并使用x.add(y)
to perform x + y
,但它并没有将自己展示为二元运算符,所以我不确定这是否应该是首选。我也可以将其定义为静态方法,例如Vector.add(x, y)
. 最后,我还可以定义add()
为类的友元函数,这非常(数学上)自然,但在我看来有点违背OOP
. 我希望对哪些方法更可取(以及为什么)有所了解。