操作符重载使用*和*=作为点积或叉积
Operator overloading use * and *= as dot or cross product
我正在为基本向量操作创建一个向量类,并试图决定哪一个[点积或叉积]是最好的超载*
和*=
操作符,并希望其他人的想法。
到目前为止,我已经实现了+
, +=
, -
和-=
。
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&
。
你是怎么想的?
您想知道*
应该意味着哪个操作,这是一个强烈的暗示,不要使用它。事实上,*
和*=
也可能意味着组件式乘法。避免混淆是这里最好的选择,所以只使用名称dot
和cross
的操作,忘记*
操作符。
如果有疑问,弃权。
这是对操作符重载最重要的建议。
只要记住将它分别应用于可能的输入类型的每个组合,所以标量乘法是可以的,点积和叉积,因为两者都是合理的,所以不应该考虑。
BTW:没有办法使*=
平均点积,结果与任何一个参数都不属于同一类型。
旁白:您的Vector
可能很容易与标准容器vector
混淆。你可能需要解决这个问题
虽然最好使用dot
和cross
函数,但如果坚持使用*
运算符,则应该使用点积。向量积只对R3中的向量有效,所以点可能更有用。
相关文章:
- 继承函数的重载解析
- 二叉排序树无法编译
- 你能重载对象变量名本身返回的内容吗
- 从父命名空间重载类型
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 重载操作程序时出错>>用于类中的字符串 memebr
- 一个关于在C++中重载布尔运算符的问题
- 不同翻译单元中不可重载的非内联函数定义
- 为什么使用SFINAE而不是函数重载
- 重载运算符>>从二叉树中删除节点
- 二叉搜索树<<运算符重载不起作用
- 二叉树中的运算符重载
- 如何使用叉积计算两个 2D 矢量之间的角度
- 特征中的叉积矩阵
- 操作符重载使用*和*=作为点积或叉积
- 二叉搜索树重载==操作符或只需要一般建议
- 这个代码如何从两个2D向量的叉积中检索2D向量
- 这个代码是逆时针还是顺时针旋转关于叉积的点云
- 寻找一个好的3D空间矢量类,具有点积,叉积和其他常见操作