运算符重载:多个矩阵

Operator overload: Multuplying matrices

本文关键字:重载 运算符      更新时间:2023-10-16

我正在尝试为矩阵设置一些重载运算符函数,其中我使用构造函数动态分配它们,并使用 istream 运算符设置值。我在尝试乘以两个矩阵时遇到了问题(运行时错误(。

任何帮助将不胜感激。ps:我不熟悉模板。

这是我的*运算符函数:

matrixType operator*(matrixType m)
{
    if( Rows==m.Cols && Cols==m.Rows)
    {
        matrixType m3(Rows,m.Cols);
        for( int i=0; i<Rows;i++)
        {
            for( int j=0; j<Cols; j++)
            {
                {
                  for(int g=0; g<Cols;g++)
                      m3.matrix[i][j]+=matrix[i][g] * m.matrix[g][j];
                }
            }
        }
        return m3;
    }
}

这是我的复制运算符函数:

matrixType& operator=( matrixType& m)
{
    for (int i =0; i<Rows; i++)
    {
         for ( int j=0; j<Cols; j++)
                matrix[i][j]=m.matrix[i][j];
    }
    return *this;
}
我认为

如果在运行代码时发布一些运行时错误会更好。无论如何,我在您的乘法运算符函数中发现了一个问题:

当你返回 m3

时,它是在另一个作用域中定义的,因此它没有定义,你把返回 m3 语句放在 if 作用域内怎么样:

matrixType operator*(matrixType m)
{
    if( Rows==m.Cols && Cols==m.Rows)
    {
        matrixType m3(Rows,m.Cols);
        for( int i=0; i<Rows;i++)
        {
            for( int j=0; j<Cols; j++){
                    {for(int g=0; g<Cols;g++)
                    m3.matrix[i][j]+=matrix[i][g] * m.matrix[g][j];}
        }
        return m3;
    }
      // Throw some error if your assertion is not satisfied, perhaps
    }
}

您在j循环中使用了错误的Cols。 你想在那里m.Cols

for (for( int j=0; j<m.Cols; j++)

查看 ijg 变量用于下标的位置,以了解 3 个循环的极限值。