运算符重载使用*和* =作为点或交叉乘积

时间:2014-08-19 22:59:03

标签: c++ vector

我正在为基本矢量操作创建一个矢量类,并尝试确定哪一个[点积或交叉积]最好使**=运算符超载想要别人的想法。

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

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&的趋势产品。

你有什么想法?

3 个答案:

答案 0 :(得分:3)

您想知道哪个操作*应该意味着强烈暗示不使用它。事实上,**=也可能意味着分量乘法。避免混淆是最好的选择,所以只需使用名称dotcross进行操作,忘记*运算符。

答案 1 :(得分:1)

如果有疑问,请弃权。

这是operator overloading最重要的建议。

请记住将它分别应用于可能的输入类型的每个组合,因此标量乘法是正确的,点和交叉产品,因为两者都是合理的,不应该被考虑。

顺便说一句:没有办法让*=代表点积,结果与任何一个参数都不是同一类型。

除此之外:您的Vector可能很容易与标准容器vector混淆。你可能想解决这个问题。

答案 2 :(得分:0)

虽然最好使用dotcross函数,但如果您坚持使用*运算符,则应使用点积。交叉产品仅对R3中的向量有效,因此dot可能更有用。