操作符重载使用*和*=作为点积或叉积

Operator overloading use * and *= as dot or cross product

本文关键字:叉积 重载 操作符      更新时间:2023-10-16

我正在为基本向量操作创建一个向量类,并试图决定哪一个[点积或叉积]是最好的超载**=操作符,并希望其他人的想法。

到目前为止,我已经实现了+, +=, --=

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&

你是怎么想的?

您想知道*应该意味着哪个操作,这是一个强烈的暗示,不要使用它。事实上,**=也可能意味着组件式乘法。避免混淆是这里最好的选择,所以只使用名称dotcross的操作,忘记*操作符。

如果有疑问,弃权。

这是对操作符重载最重要的建议。

只要记住将它分别应用于可能的输入类型的每个组合,所以标量乘法是可以的,点积和叉积,因为两者都是合理的,所以不应该考虑。

BTW:没有办法使*=平均点积,结果与任何一个参数都不属于同一类型。

旁白:您的Vector可能很容易与标准容器vector混淆。你可能需要解决这个问题

虽然最好使用dotcross函数,但如果坚持使用*运算符,则应该使用点积。向量积只对R3中的向量有效,所以点可能更有用。