C++ 重载运算符 double * Vec

标签 c++ visual-c++ operator-overloading

我试图创建一个 Vec 类来表示一组 3 个 double 值,分别为 x、y、z。我想做的是让它乘以一个标量乘以 vector ,然后让它乘以每个分量。

当我将一个 vector 乘以一个标量时,我已经能够让它工作,但当我做相反的事情时却不行。例如以下作品:

Vec a = Vec(1.0, 1.0, 1.0);
Vec b = a * 2.0;

但是,每当我尝试将标量乘以 vector 时,它都不起作用。理想情况下,该命令应如下所示:

Vec a = Vec(1.0, 1.0, 1.0);
Vec b = 2.0 * a;

这是我到目前为止完成的代码:

#include "Vec.h"
#include <limits>
#include <cmath>
#include "constants.h"
#include <iostream>
#include <string>

double Vec::angle( const Vec & vec) {
    return acos((this->dot(vec))/(this->mag() * mag()));
}

double Vec::angle_d(const Vec & vec) {
    return (angle(vec) * _PI / 180.0);
}

double Vec::angle_r(const Vec & vec)    {
    return this->angle(vec);
}

Vec Vec::cross( const Vec& vec) {
    return Vec( (y * vec.z - z * vec.y),
            (z * vec.x - x * vec.z),
            (x * vec.y - y * vec.x));
}

double Vec::dot( const Vec & vec)   {
    return (x * vec.x + y * vec.y + z * vec.z);
}

double Vec::mag()   {
    return std::sqrt(x*x + y*y + z*z);
}

Vec Vec::operator=(const Vec& rhs)  {
    return Vec(rhs);
}

Vec Vec::operator*(const Vec& rhs)  {
    return Vec( x * rhs.x, y * rhs.y, z * rhs.z);
}

Vec Vec::operator*(const double rhs)    {
    return Vec(rhs * x, rhs * y, rhs * z);
}

Vec::Vec()  : 
    x(std::numeric_limits<double>::signaling_NaN()),
    y(std::numeric_limits<double>::signaling_NaN()),
    z(std::numeric_limits<double>::signaling_NaN()) {   }

Vec::Vec( double c) :
    x(c), y(c), z(c)    {}

Vec::Vec(const Vec & vec)   : 
    x(vec.x), y(vec.y), z(vec.z)    {   }

Vec::Vec(double a, double b, double c)  
    : x(a), y(b), z(c)  {   }

最佳答案

您需要一个带有两个参数的全局运算符:一个 double 参数和一个 Vec,它可以通过调用您已经列出的运算符轻松实现

inline Vec operator*(double s, const Vec& v) {
    return v * s;
}

关于C++ 重载运算符 double * Vec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11770967/

相关文章:

c++ - std::functions 错误 vector

c++ - 在 C++ 中,new 运算符之后和类型之前的括号 (placement_params) 是什么意思?

c++ - 从 unsigned char* 到 const wchar_t* 的转换

c++ - 如何通过另一个程序访问 Windows 服务对象

python - ctypes 为 c_ulong 重新实现 rshift

vb.net - VB.NET 中的运算符重载

c++ - 如何在需要自由函数的地方传递成员函数?

安卓CMake : 'uint64_t' does not name a type

c++ - std::unordered_map 不释放内存

r - 一元运算符重载:风险?