C++ 运算符重载将*和*=用作点积或叉积
我正在为基本向量操作创建一个向量类,并试图确定哪一个[点积或叉积]最适合重载C++ 运算符重载将*和*=用作点积或叉积,c++,vector,C++,Vector,我正在为基本向量操作创建一个向量类,并试图确定哪一个[点积或叉积]最适合重载*和*=操作符,并希望其他人的想法 到目前为止,我已经实现了+、+=、-和-= template<typename T> Vector<T> Vector<T>::operator+(const Vector<T>& rhs) { Vector<T> result(*this); result += rhs; return res
*
和*=
操作符,并希望其他人的想法
到目前为止,我已经实现了+
、+=
、-
和-=
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;
}
模板
向量向量::运算符+(常量向量和rhs){
矢量结果(*此);
结果+=rhs;
返回结果;
}
模板
向量和向量::运算符+=(常量向量和rhs){
对于(inti=0;isize;i++)
这->向量[i]+=rhs[i];
归还*这个;
}
模板
向量向量::运算符-(常量向量和rhs){
矢量结果(*此);
结果-=rhs;
返回结果;
}
模板
向量和向量::运算符-=(常量向量和rhs){
对于(inti=0;isize;i++)
此->向量[i]=rhs[i];
归还*这个;
}
若要继续返回向量的趋势,应将叉积用于*
和*=
运算符重载,或使用点积返回T&
您的想法是什么?您想知道*
应该是哪个操作,这是一个强烈的提示,提示您不要使用它。事实上,*
和*=
也可能意味着组件式乘法。避免混淆是最好的选择,因此只需使用名称点
和交叉
,并忘记*
运算符。如果有疑问,请放弃。
这是对你最重要的建议
只需记住将其分别应用于可能的输入类型的每个组合,因此标量乘法是可以的,点积和叉积是可以的,因为两者都是合理的,不应考虑
顺便说一句:没有办法使*=
表示点积,结果与两个参数的类型不同
旁白:您的向量
可能很容易与标准容器向量
混淆。您可能需要解决这个问题。虽然使用点
和交叉
函数会更好,但如果您坚持使用*
运算符,则应该使用点积。叉积只对R3中的向量有效,所以点可能更有用。你考虑过吗?这个问题是离题的,因为它完全是基于观点的。由于模糊性,我两个都不说。使用交叉
方法和点
方法来区分它们。不是所有的东西都必须是运算符。@quantdev我有并且也有std::vector
,但是在考虑了以后我将如何处理这个类之后,我认为最好的是vector
类。谢谢你的想法!好吧,只要我们谈论的是愚蠢的超载想法。。。。您可以为标量乘法重载*
;这是一个自然的、规范的定义。我将重载操作符*用于点,因为sqrt(点(v,v))==abs(v)。这与浮点或双sqrt(f*f)==abs(f)一致。我们特别考虑了L2范数,abs(v),称之为范数,我们用“normalize”来表示v/abs(v),所以我要说的是,我们肯定认为v*v是abs(v)^2。@SamuelDanielson是的,如果我在源代码中看到v*v
,我会假设操作符*
作为点积重载。但是,一般来说,对于u*v
,这可能并不清楚。另外,正如另一个答案所指出的,操作符*=
不能实现为点积,而可以实现为叉积。点积和叉积都不能满足人们对标量乘法的所有基本直觉,这就是为什么我不建议在这里使用运算符的原因。命名方法总是更具可读性,除非运算符具有明确和明显的语义。真正的问题是在点和并矢积之间,因为矩阵项中的点积是行向量乘以列向量,并且并矢积是列向量乘以行向量。