我正在开发一个矩阵库作为一个学习项目,在这样做的过程中,我重载了 * 运算符来执行矩阵乘法。我还重载了它来处理标量乘法(将矩阵的每个元素乘以双精度)。我的问题是,当运行以下代码时, test2 和 test 都被修改了,这是不希望的。
Matrix test2 = 2 * test;
我确信这是一个问题,因为 Matrix 是一个类,因此通过引用传递,但没有将 Matrix 更改为结构(我认为这不合适,并且尝试时似乎不工作),我看不到任何解决此问题的方法。我将如何解决这个问题?
实际的操作员代码是
public static Matrix operator *(Matrix m1, double c)
{
Matrix ret = m1;
for (long i = 0; i < ret.Width; i++) // Iterate over the rows.
{
for (long p = 0; p < ret.Height; p++) // Iterate over the columns.
{
ret[i, p] *= c;
}
}
return ret;
}