我正在制作一个matrix3x3类,虽然我有其所需的功能但是运算符重载*=
,+=
,-=
和/=
并且#39;工作。这就是我所拥有的:
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)