我正在为基本矢量操作创建一个矢量类,并尝试确定哪一个[点积或交叉积]最好使*
和*=
运算符超载想要别人的想法。
到目前为止,我实现了+
,+=
,-
和-=
。
template<typename T>
Vector<T> Vector<T>::operator+(const Vector<T>& rhs) {
Vector<T> result(*this);
result += rhs;
return result;
}
template<typename T>
Vector<T>& Vector<T>::operator+=(const Vector<T>& rhs) {
for (int i = 0; i < this->size; i++)
this->vector[i] += rhs[i];
return *this;
}
template<typename T>
Vector<T> Vector<T>::operator-(const Vector<T>& rhs) {
Vector<T> result(*this);
result -= rhs;
return result;
}
template<typename T>
Vector<T>& Vector<T>::operator-=(const Vector<T>& rhs) {
for (int i = 0; i < this->size; i++)
this->vector[i] -= rhs[i];
return *this;
}
如果交叉产品用于Vector<T>
和*
运算符重载或从使用点返回*=
,则继续返回T&
的趋势产品。
你有什么想法?
答案 0 :(得分:3)
您想知道哪个操作*
应该意味着强烈暗示不使用它。事实上,*
和*=
也可能意味着分量乘法。避免混淆是最好的选择,所以只需使用名称dot
和cross
进行操作,忘记*
运算符。
答案 1 :(得分:1)
如果有疑问,请弃权。
这是operator overloading最重要的建议。
请记住将它分别应用于可能的输入类型的每个组合,因此标量乘法是正确的,点和交叉产品,因为两者都是合理的,不应该被考虑。
顺便说一句:没有办法让*=
代表点积,结果与任何一个参数都不是同一类型。
除此之外:您的Vector
可能很容易与标准容器vector
混淆。你可能想解决这个问题。
答案 2 :(得分:0)
虽然最好使用dot
和cross
函数,但如果您坚持使用*
运算符,则应使用点积。交叉产品仅对R3中的向量有效,因此dot可能更有用。