C++ 运算符重载不会';行不通
我正在创建一个matrix3x3类,虽然我拥有所需的功能,但是操作符重载对于C++ 运算符重载不会';行不通,c++,C++,我正在创建一个matrix3x3类,虽然我拥有所需的功能,但是操作符重载对于*=,+=,-=和/=都不起作用。以下是我所拥有的: mat3 operator*(const mat3 &m); // Declared within mat3 class mat3 mat3::operator *=(const mat3& m) // How it's implemented { *this = *this * m; return *this; } 只需说一句,它
*=
,+=
,-=
和/=
都不起作用。以下是我所拥有的:
mat3 operator*(const mat3 &m); // Declared within mat3 class
mat3 mat3::operator *=(const mat3& m) // How it's implemented
{
*this = *this * m;
return *this;
}
只需说一句,它有点起作用;但这就是我想要的用法:
mat3 m; // Initialise to identity matrix
m *= mat3(2.0); // Multiply matrix by scalar and apply
问题是它根本不会影响矩阵m
保持不变,即使我刚刚对其执行了*=mat3(2.0)
操作。然而,这是可行的:
m = m *= mat3(2.0);
这太傻了,因为我还不如:
m = m * mat3(2.0);
关键是上面所有的乘法必须返回相同的结果。这里既没有近似,也没有妥协。坦率地说,所有与*=
,+=
等相关的运算符都不起作用。我如何使这种运算符重载工作,使矩阵相乘并应用该乘法可以像以下操作一样简单:
m *= mat3(2.0)
根据运算符*=写入运算符*。你搞错了。想想它会返回什么:
mat3 mat3::operator*=(const mat3&m)
。然后读@richardhoges,你能解释一下吗?我猜你的复制赋值操作符或复制构造函数没有正确实现。要获得好的答案,请在返回类型mat3&mat3::operator*=(const mat3&m)