您最喜欢的实现/使用向量操作的方法是什么?
发布于 2011-04-13 14:01:55
重载运算符可以是好的,但前提是重新定义的运算符的行为与原始运算符相似。由于矢量有两个常见的乘积(点和十字),这可能会引起问题。(我认为operator*()代表圆点,operator%代表交叉,但在实践中我从未见过这种情况。)
点积与两个向量的关系是相等的,所以我不想使用第一个版本。它看起来太像vec2应用于vec1了。
因此,我宁愿使用dot(vec1, vec2)。它看起来像它是对称的,它并没有使向量类接口变得更大。你把越多的东西装进一个类(咳嗽,std:string咳嗽),它是越复杂,更有可能出问题的地方。
发布于 2011-04-13 13:38:02
虽然这不是一个很好的主观问题的基础,但我要避开第三个例子
vec1 * vec2因为乘法和点函数不同。这很容易造成混淆,因为(主观的,直观的)可能超载'*‘字符。
发布于 2011-04-13 13:52:02
假设是C++,我将选择您的第二个选项。
最后一个选项是我最不喜欢的,但它增加了困惑:*是什么意思?点积还是交叉积?特别是如果你做了vec * scalar标量乘法(我个人也会避免),那么它就会变得更加混乱。
所以这只是在第一个和第二个选项之间。如果你读赫伯·萨特的文章“单石“解开””,他会详细介绍为什么非会员的非朋友函数比成员函数具有更好的界面,所以我不会重复他说的每一句话,只是说我同意其中的大部分内容。
https://softwareengineering.stackexchange.com/questions/67757
复制相似问题